Word.Application и области редактирования

Тема в разделе "Lotus - Программирование", создана пользователем seoman2, 28 июл 2016.

Метки:
  1. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Не совсем к лотус разделу, проблема более общая.

    Есть шаблонный файл docx с несколькими разрешенными областями редактирования.
    Хочу получить значение одной из них.

    Set WA = CreateObject ("Word.Application")
    Set wdoc = WA.Documents.Open

    А потом непонятно, как обратиться определенной области редактирования.
    Всякие секции и параграфы не подойдут.
     
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    странная формулировка, ну да ладно...
    мне почему-то кажется что "областями" вы называете поля (так раньше они, в ворде, назывались), программно - это bookmark
    предупреждаю - названия могут "слетать", если вы создадите с "таким же" названием (интерактивно, в ворде)
    есть ограничение на длину вставляемой замены
    лучше-всего искать их и целиком менять, на свой текст
    на эту тему было 100500 вариантов, в т.ч. на notesnet.ru http://www.notesnet.ru/library/docid/5E77A5

    Более гибким будет замена по шаблону (но там тоже есть засада с длиной текста) - т.е. создаем текст (а не поле) помеченный к-л тегами (я, для себя избрал <Field1>)
    почему - для того чтобы м.б. одинаковые "названия" для подстановки
    поиск и замену выкладывал здесь, ЕМНИП - в двух вариантах: с использованием COM и POI
    последнее - предпочтительнее, работает быстрее, нет ограничение на длину подстановки (я не втыкался)
     
  3. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    неплохой вариант размещать "области редактирования" в ячейки таблицы ворд (можно без границ), тогда просто писать в нужную ячейку (номер табл. известен номер ячейки тоже)
     
  4. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Msgbox Cstr(wdoc.Bookmarks.Count) выдает 0.
    На основе шаблона на скрине в лотусовой базе есть много доков с заполненным шаблоном.
    Мне надо получить значение в поле "Текст".
    Менять шаблон уже нельзя.
     

    Вложения:

  5. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    с таблицами есть особенности: обтекание, переносы, опять же вложенные - не всегда адекватно ведут себя, именами - только с офиса 2010 (а номера могут и поплыть ;) )
    вот потому я и остановился на решении выше
    а еще - бывает нужно заменить таблицу целиком (это проще - чем итерировать её стр-ру)
     
  6. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    как это "поле" создавалось?
     
  7. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
  8. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Msgbox Cstr( worddoc.Sections(2).FormFields(1).Name ) - нет такого объекта у меня, как FormFields.
    Поле не я создавал (
     
  9. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    я не могу сказать - что у вас есть, у меня и дока нет...
    и в принципе, как уже не раз здесь говорил - ССЗБ - накорячили документ, запихнули туда "неизвестно что", используем КОМ, в кот. свои особенности...
    Чем не метод заполнения доков - как указано было выше? Переделайте их (шаблоны) под свой документооборот, выкиньте свисто-перделки добавленные неучами МСО - всё - проблема решена
    да, не забудьте снять защиту с доков (может в этом причина ваших "проблем), если "ворд" приложен к документу нотуса - не нужна ему псевдо-защита от МС
    Мы, сейчас, обсуждаем с вами тему, кот. никаким боком не относится к LDN
     
  10. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Могу прислать такой док, но не на форум.
    У меня есть рабочий документооборот, в каждом лотусовом документе в одном из полей вложен шаблонный docx файл, в котором юзеры заполняют разрешенные для редактирования поля. Мне нужно у таких доков вытянуть содержимое поля "текст".
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    пароли от этих доков известны (чтобы я не ломал вордятину)?
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    в вашем случае, иного способа как через... параграфы нет ;)
    но здесь есть хак
    Код (LotusScript):
    Dim pars As Paragraphs, word As Document
    Set word = Application.ActiveDocument
    Set pars = word.Paragraphs
    Dim par As Paragraph
    For Each par In pars
        If par.Range.Editors.Count > 0 Then
            MsgBox par.Range.Text
        End If
    Next
     
    это VB, переделать код на LS несложно - типы убрать, ActiveDocument не нужен - wdoc у вас, цикл заменить на forall...End forall
     
  13. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    С параграфами я пробовал. Если в поле "Текст" будет много параграфов, как не взять лишние?
    Я как бы думал, брать все параграфы со второй секции, пропустив несколько первых, но тогда зацеплю и . последующие за "текст" поля...
     
  14. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    if будет срабатывать только для тех параграфов, у кот. есть права на "редактирование" (на самом деле - присвоены те - кто может редактировать)
     
  15. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    стразу оговорюсь - такой способ управления информацией в ворде - порочен, в принципе
    будет глючать, программный доступ с абзацам (через VBA) работает не всегда стабильно
    бывает наслоение всяких объектов/стилей... как результат - сам ворд как-то кажет и находит текст, а вот программно - нет
    сталкивался с таким в букмарках (иногда помогало убиение текст и воссоздание заново без форматирования)

    второй момент - у вас невозможно отследить - куда ввели текст - т.е. текст получить можно , но понять к чему он относится - нет
    Отсюда вывод - информация должна заводится в нотус (в виде полей/документов...) и оттуда подставляться в ворд (в нужные места)

    Пользователя НУЖНО максимально изолировать от возможности вносить изменения в МСО, тогда - большинстово проблем отпадет
    Желательно, на выходе, получать ПДФ (дабы исправлять стало ощутимо сложнее)
     
  16. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Еще вопрос - получаю диапазон
    Set worddoc = WordApp.Documents.Open ....
    Set myRange = worddoc.Range (кусок текста между закладками)
    Причем Cstr(myRange.text) содержит просто текст без абзацев, каких-то пометок жирности и прочего.
    Как бы получить текст из myRange, который можно было бы потом обработать?
    Мне потом надо заменить символы ворда на html.
     
  17. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    аппетит приходит...
    вот я не вижу правильной такую постановку задачи
    оно как-то все вывернуто наизнанку
    как можно разделить задачу:
    • вордовые шаблоны - это разные файлы ворда присобаченные к доку нотуса. В них есть "поля" (некие метки, м.б. текстовые) кот. подлежат замене
    • поля для подстановки - нотусевые доки, кот. включают описание, название, значение, шаблон заполнения
    • юзер заполняет поля (нотусевые доки), саму вордятину он не трогает, по кнопке - ему формируют вордятину (в соответ. с выбранным шаблоном)
    • буде на то необходимость - можно выдавать на выход ПДФ (дабы юзеру не повадно было пальцА сувать в документ), кот. сохраняется в БД (в т.ч.)
    по вопросу - смотрите в VBA пропертЯ и ф-ции Range
     
  18. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Как обработать ошибку, если у документа нет закладок? Не могу проверить существование закладки.
    всякие Bookmark(1).Range.Start is nothing не работают ((
    Код (Text):
    Set worddoc = WordApp.Documents.Open ....
    Set Bookmark = worddoc.Bookmarks
    mStart% = Bookmark(1).Range.Start
     
  19. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Если версия 2010+ , то возможно через Bookmarks.Count
    Свойство возвращает коллекцию закладок, есть подозрение, что коллекция есть всегда, но количество равно нулю.
     
  20. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Надо точно знать как называется поле. Скорее всего, то, что вы видите на экране это Default Value. Попробуйте Selection.GoTo
    Код (LotusScript):

    Dim word As Variant
    Set word = CreateObject("Word.Application")
    word.Selection.GoTo -1,,,FieldName
    MsgBox word.Selection.Text
     
     
Загрузка...
Похожие Темы - Word Application области
  1. Eugen
    Ответов:
    6
    Просмотров:
    1.551
  2. seoman2
    Ответов:
    6
    Просмотров:
    136
  3. Dragon108
    Ответов:
    0
    Просмотров:
    205
  4. Ruska132
    Ответов:
    36
    Просмотров:
    1.436
  5. Mrack
    Ответов:
    0
    Просмотров:
    373

Поделиться этой страницей