Newcomposers.ru

IT Мир
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Word переменные документа

Как найти переменные документа в MS Word без использования макроса

У меня есть документ с некоторыми переменными документа, и я пытаюсь использовать эти переменные в документе. Но поскольку переменные задаются внешней системой (которая не очень хорошо документирована), я играю в гадовую игру. Я предполагаю, что существует переменная с «датой последней ревизии», а затем начинает угадывать, что эта переменная могла быть вызвана.

Есть ли способ перечислить все переменные документа в документе MS Word и их значения, чтобы можно было просмотреть их при использовании их в документе? (Я работаю над MS Office 2010)

2 ответа

В Word есть несколько разных типов «переменных». Есть вещи, известные как «Переменные документа», но есть и другие вещи, которые я буду называть «свойствами». Я попытаюсь перечислить основные типы ниже.

В Word есть несколько мест, в которых вы можете найти некоторые типы свойств, но для истинных «переменных» и других типов свойств, если вы не можете использовать макросы или другой код, вам нужно разархивировать. docx и посмотреть различные файлы там.

Места, которые вы можете посмотреть в Word 2010 (здесь нет переменных документа) .

а. В «Backstage» — посмотрите вкладку «Файл», «Информация», и вы увидите некоторые свойства, перечисленные справа. Нажмите «Показать все свойства» в нижней части списка, и вы можете увидеть больше.

б. На вкладке «Вставка», «Текст», «Быстрые детали» и «Свойства» вы должны увидеть список «Встроенные свойства + некоторые или все свойства, вставленные с помощью Sharepoint, если это то, что вы используете».

с. В «Панели информации о документе» (DIP). Если вы этого не видите, зайдите в меню «Файл», затем «Параметры», затем (скажем) панель быстрого доступа. Выберите «Выбрать команды» в разделе «Все команды», затем найдите «Свойства», выберите его и нажмите кнопку «Добавить». Затем вы увидите значок на панели быстрого доступа с маленьким белым «i» на круговом синем фоне. Нажмите это, и вы увидите либо некоторые встроенные свойства (Author, Title и т. Д.), Либо некоторые свойства Sharepoint «Тип контента», если вы используете SharePoint. Возможно, вы сможете перевернуть один из нескольких видов. Если вы затем щелкните раскрывающийся список в левом верхнем углу DIP и выберите «Дополнительные свойства», вы увидите диалоговое окно с несколькими вкладками, которое показывает

некоторые встроенные свойства

«пользовательские» свойства пользовательского документа в старом стиле.

Для всего остального вам, вероятно, придется искать в XML в .docx. Для этого сделайте копию своего документа. Скажем, копия называется mydoc.docx. Переименуйте это в mydoc.docx.zip, откройте zip, а затем найдите несколько вещей, как предлагается ниже .

а. true Document Variables хранятся в папке слов в файле settings.xml в элементе w: docVars. Вы должны увидеть имя и значение для каждой переменной. Вы можете вставить значения Document Variables в свой документ с помощью поля .

б. Встроенные свойства документа, в том числе такие, как автор, название и т. Д. В большинстве случаев значения могут быть вставлены в документ, используя сфабризированные поля, такие как поля или в некоторых случаях . Хотя это немного грязно, есть стандартный список имен. Вы можете найти большинство значений в папке docProps в файлах core.xml и app.xml. Однако некоторые («Свойства титульной страницы») сохраняются, если они используются, в одном из файлов «item.xml» (например, «item1.xml» в папке customXml.

с. статические «пользовательские» пользовательские свойства документа, которые состоят главным образом из пар имя /значение, значения которых могут быть вставлены в документ с использованием полей , например. . Они отображаются в диалоговом окне «Дополнительные свойства . », но в .docx они находятся в файле custom.xml в папке docProps.

д. настраиваемые свойства нового стиля, также известные как «Свойства Sharepoint» или «Свойства типа контента», потому что они часто создаются и заполняются из столбцов в списке Sharepoint. Значения хранятся в «Пользовательских частях XML» и могут быть вставлены с помощью элементов управления содержимым, которые были настроены так, чтобы указывать на соответствующий бит XML. (Только Word 2007 и позже). В .docx вы найдете ряд «схем» для этих переменных и значения переменных в папке customXML в файлах с именем «item1.xml», «item2.xml» и т. Д.

е. наконец, любой разработчик может поместить свои собственные XML-части в документ Word и подключить элементы управления содержимым к элементам и атрибутам в этих пользовательских частях XML. Я не буду пытаться вдаваться в подробности того, как это делается, новы найдете данные в файлах item1.xml, item2.xml и т. д. под customXML. Однако, чтобы найти элементы управления содержимым сами, их имена и то, с чем они связаны, вам обычно нужно искать в папке слова, например, document.xml и, возможно, один или несколько файлов «header» и «footer» .xml.

У меня была аналогичная проблема. Некоторые сторонние панели инструментов сбой, и мне нужно было установить значение переменной.

Это немного грубо, но вот код VBA, который я выбил, перечисляет все переменные в коллекции ActiveDocument.Variables ;

Вы можете создать новый макрос и выгрузить его там, что должно предоставить вам информацию. Когда вы нашли имя интересующей вас переменной, вы можете установить ее с помощью

Переменные docvariable

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщений [ 11 ]

1 Тема от tna 18.12.2016 16:16:54

  • tna
  • сержант
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 18.03.2014
  • Сообщений: 17

Тема: Переменные docvariable

Каким образом можно понять какие переменные прописаны в docvariable.

Сколько и какие переменные и с какими значениями. Это где-нибудь видно?

Макросом можно ли вывести все переменные docvariable в текст (имя и значение)?

2 Ответ от yshindin 18.12.2016 21:27:35

  • yshindin
  • генерал-полковник
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 12.05.2012
  • Сообщений: 446
  • Поблагодарили: 170

Re: Переменные docvariable

Каким образом можно понять какие переменные прописаны в docvariable.
Сколько и какие переменные и с какими значениями. Это где-нибудь видно?
Макросом можно ли вывести все переменные docvariable в текст (имя и значение)?

Переменные — это коллекция специальных объектов, хранимых вместе с документом. Их можно создавать, изменять, удалять. Их можно применять в тексте документа, например, через поле .
Вот пример — выдать в отладочной печати все переменные документа.

3 Ответ от yshindin 18.12.2016 21:36:03

  • yshindin
  • генерал-полковник
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 12.05.2012
  • Сообщений: 446
  • Поблагодарили: 170
  • За сообщение: 1

Re: Переменные docvariable

. . .
Вот пример — выдать в отладочной печати все переменные документа.
. . .

Прошу прощения, лишние строки затесались
Вот правильный код.

4 Ответ от tna 18.12.2016 21:46:18

  • tna
  • сержант
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 18.03.2014
  • Сообщений: 17

Re: Переменные docvariable

Почему то не выводит на экран (

Читать еще:  Символ галочка в word

5 Ответ от yshindin 18.12.2016 23:10:17

  • yshindin
  • генерал-полковник
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 12.05.2012
  • Сообщений: 446
  • Поблагодарили: 170
  • За сообщение: 1

Re: Переменные docvariable

Почему то не выводит на экран (

VBA выводит это в область Immediate среды отладки. Перейдите в среду VBE (Alt+F11), отобразите область Immediate, затем запустите макрос.

6 Ответ от yshindin 18.12.2016 23:14:38

  • yshindin
  • генерал-полковник
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 12.05.2012
  • Сообщений: 446
  • Поблагодарили: 170

Re: Переменные docvariable

Почему то не выводит на экран (

Впрочем, если в документе еще нет переменных, то ничего не будет выведено.
Попробуйте такой код:

7 Ответ от tna 19.12.2016 07:38:32

  • tna
  • сержант
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 18.03.2014
  • Сообщений: 17

Re: Переменные docvariable

работает предпоследний макрос

Sub DocVars()
Dim i As Long
For i = 1 To ActiveDocument.Variables.count
Debug.Print ActiveDocument.Variables(i).Name & _
» = » & ActiveDocument.Variables(i).Value & VbCrLf
Next i
End Sub

yshindin спасибо

8 Ответ от Boris_R 19.12.2016 11:31:44

  • Boris_R
  • полковник
  • Неактивен
  • Зарегистрирован: 07.08.2012
  • Сообщений: 233
  • Поблагодарили: 110
  • За сообщение: 2

Re: Переменные docvariable

Очень удобную надстройку, позволяющую работать с переменными документа, закладками и свойствами (Word Variables, Bookmarks and Properties editor add-in for Word 2007 — 2016), которую разработал Graham Mayor (ник на англоязычных сайтах — gmayor) можно скачать отсюда:
внешняя ссылка

После запуска надстройки в открывшемся окне можно увидеть все переменные документа, отредактировать (при необходимости) их значения, создать новые переменные, а также работать с закладками и свойствами документа.

9 Ответ от tna 19.12.2016 12:00:21

  • tna
  • сержант
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 18.03.2014
  • Сообщений: 17

Re: Переменные docvariable

Спасибо, но у меня 2003 (

10 Ответ от tna 20.12.2016 08:32:59

  • tna
  • сержант
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 18.03.2014
  • Сообщений: 17

Re: Переменные docvariable

После танца с бубном удалось подключить к 2003. Очень удобная надстройка. Еще раз спасибо.

11 Ответ от tna 20.12.2016 08:36:56

  • tna
  • сержант
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 18.03.2014
  • Сообщений: 17

Re: Переменные docvariable

Вопрос решен. Тема закрыта Всем спасибо.

Сообщений [ 11 ]

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Вы можете помочь в развитии сайта, сделав пожертвование:

Или помочь сайту популярной криптовалютой:

BTC Адрес: 1Pi3a4c6sJPbfF2sSYR2noy61DMBkncSTQ

ETH Адрес: 0x7d046a6eaa1bd712f7a6937b042e9eee4998f634

LTC Адрес: LUyT9HtGjtDyLDyEbLJZ8WZWGYUr537qbZ

DOGE Адрес: DENN2ncxBc6CcgY8SbcHGpAF87siBVq4tU

BAT Адрес: 0x7d046a6eaa1bd712f7a6937b042e9eee4998f634

XRP Адрес: rEb8TK3gBgk5auZkwc6sHnwrGVJH8DuaLh Депозит Tag: 105314946

USDT (ERC-20) Адрес: 0x7d046a6eaa1bd712f7a6937b042e9eee4998f634

Яндекс Деньги: 410013576807538

Вебмани (R ещё работает): R140551758553 или Z216149053852

А тут весь список наших разных крипто адресов, может какой добрый человек пожертвует немного монет или токенов — получит плюсик в карму от нас 🙂 Благо Дарим, за любую помощь!

Похожие темы

Переменные docvariable

Для тех, кто хочет превратить процесс создания, проверки и редактирования, оформления и форматирования текстов из рутины и нудной механической работы в удовольствие, существует прекрасная возможность перенять приемы по автоматизации работы в Ворде, а также познакомиться с тонкими и редко используемыми настройками приложения на форуме сайта Ворд Эксперт. На портале о Microsoft Office Word вы узнаете про: как в верде сделать рамку.

На форуме обсуждаются любые вопросы, связанные с программой. В первую очередь это написание всевозможных макросов и шаблонов для тех, либо иных операций. На портале о Microsoft Office Word вы узнаете про: как сделать чтобы в worde таблицы не прыгали. Участники делятся секретами настроек приложения, оптимизации своей работы, предлагают готовые решения или схемы, по которым можно разработать решения самому. На портале о Microsoft Office Word вы узнаете про: повторить введённый текст. Также в специальном подфоруме есть возможность оставить заявку с описанием своей проблемы.

Word переменные документа

Поля (коллекция Fields) используются в документах Word достаточно широко и играют множество самых разных ролей. Поэтому стоит поговорить о них подробнее. В зависимости от назначения поля оно относится к одной из 9 возможных категорий. Нет смысла и возможности заниматься полным анализом этих категорий, но некоторые основные роли, которые играют поля, я перечислю:

    Поля могут хранить в документе некоторую обновляемую информацию. Такими полями являются поля Date и Time из категории Date and Time, хранящие текущую дату и текущее время. В полях Author , FileName , KeyWords , NumPages и других полях из категории Document Information содержится подробная информация о документе авторе документа, файле, в котором он находится, числе занимаемых страниц. В полях UserName и UserAddress из категории User Information хранится информация о фамилии и адресе владельца компьютера, используемая по умолчанию для создания поля Author документа, для создания обратного адреса по умолчанию при работе с конвертами. Эта роль полей достаточно понятна. Ясно, как программно и вручную можно работать с такими полями. Заметим, что значения некоторых из упомянутых полей меняются автоматически, например, время, дата, число страниц документа (число страниц документа — 57, число символов — 149609, дата — 01.07.2006, время — 9:27 )

Я только что вставил в текст, указанный в скобках, ряд полей и получил текущую информацию. За время печати этого замечания значения некоторых из этих полей число символов документа и время изменились.
Поля играют важную роль при создании документов с помощью слияния. Зачастую возникает необходимость создания группы однотипных документов, отличающихся лишь небольшими деталями. Типичным примером такого рода является группа рассылаемых писем, отличающихся адресом, названием компании и другими деталями. В этом случае создается главный документ, содержащий шаблон письма с полями и документ, хранящий источник данных. Поля главного документа задают переменную часть письма адрес, название компании и другие данные. Значения этих данных хранятся в источнике данных, который может быть таблицей Word, Access или Excel. Слияние главного документа с одной записью источника данных (строкой таблицы) приводит к появлению нового документа (письма). В слиянии могут участвовать как все записи источника данных, так и только часть из них, выбранная по запросу. В результате возникает необходимая совокупность писем. Имена полей в этом случае могут быть произвольными и представляют имена столбцов в таблице, задающей источник данных. Помимо этих полей в главном документе могут встречаться и поля Word из тех 9 категорий, о которых я уже говорил. В ситуациях слияния часто используются такие поля как Ask и Fill-In , позволяя в момент слияния запросить и добавить в документ индивидуальную информацию, не хранящуюся в записях источника данных. Поле Fill-In позволяет запросить данные при создании документа и сделать полученный ответ значением этого поля. Поле Ask работает аналогичным образом, за тем исключением, что ответ не становится значением поля, а связывается с некоторой создаваемой в этот момент закладкой. Затем эту закладку можно использовать в документе различными способами, принятыми для закладок. На деталях работы вручную останавливаться не буду, но пример такого главного документа приведу:

Читать еще:  Word съедает буквы


Рис. 1.14. Главный документ с полями разных типов

Заметьте, поля в главном документе подсвечены и среди них есть как поля, заданные источником данных, так и общие для Word поля, Ask , Fill-In , Formula , Date . Вот как выглядит источник данных, с которым я проводил эксперименты:

увеличить изображение: увеличить изображение,
Рис. 1.15. Источник данных для слияния документов

Чтобы картина была полной, взгляните на один из документов, полученных в результате слияния главного документа и источника данных:


Рис. 1.16. Документ, полученный слиянием главного документа и источника данных

  • Еще одним видом документа Word, использующим поля, является электронная форма. Необходимость в таких документах возникает, например, при пересылке анкет по электронной почте. Получатель формы заполняет поля анкеты, которые могут быть элементами управления: обычными текстовыми окнами ввода, флажками или выпадающими списками. Как поля они имеют имена: FormTextBox , FormCheckBox , FormDropDown .
  • Говоря о полях, нельзя не упомянуть о таком важном и интересном поле, как поле Formula, позволяющее организовывать вычисления в документах Word. Эти вычисления, чаще всего, организуются в ячейках таблиц Word, но могут быть вставлены и в произвольное место документа. Пример такого поля приведен в главном документе. Строятся формулы аналогично формулам Excel и могут работать как с закладками, используемыми в качестве имен переменных, так и с ячейками таблиц Word. При вычислениях можно использовать некоторые из встроенных функций, допустимых в Excel. Тема вычислений в документах Word , его таблицах заслуживает, конечно, более подробного освещения, чем эти несколько строчек. Но обо всем сказать, нам не дано.
  • Есть и другие случаи применения полей в документах Word. Например, поля автоматически создаются при создании таблиц ссылок, о которых я рассказывал ранее.
  • Я постарался кратко описать достаточно сложную тему работы с полями в документах Word. Конечно, обычно работа с полями выполняется вручную. Вряд ли, например, есть смысл создавать документ слияния программным путем. Поэтому, говоря о программировании работы с полями, я ограничусь достаточно простыми примерами. В основе программной работы с полями лежит работа с коллекцией полей Fields (Field). В следующем примере анализируются (печатаются) основные свойства объекта Field :

    Приведем результаты отладочной печати для главного документа, имеющего обширную коллекцию полей разного типа:

    Большинство полей в этом документе это поля слияния (MergeField), значения которых берутся из источника данных в момент слияния главного документа с записями источника данных. Обратите внимание, ситуация с полями напоминает ситуацию с ячейками Excel, с одной стороны в ячейке содержится формула (в поле код поля), с другой стороны вычисленное по формуле значение (результат поля). По желанию всегда можно включить просмотр в полях либо кода поля, либо результата. По умолчанию, также как и для ячеек Excel, показывается результат поля. Свойство Kind, которое для всех полей нашего документа имеет одинаковое значение, указывает на то, как происходит автоматическое обновление значения поля, имеет ли поле результат.

    Для программного создания полей используется, как обычно, метод Add коллекции Fields . Он имеет следующий синтаксис:

    Параметр Range определяет область документа, в которую вставляется поле, Type тип поля, из-за разнообразия типов этот параметр имеет около сотни различных значений. Параметр Text чаще всего используется в тех случаях, когда нужно задать переключатели, определяющие специфику работы поля. Последний параметр определяет, будет ли сохраняться форматирование при обновлении значения поля.

    Рассмотрим теперь пример программного добавления полей в документ. Я ограничусь достаточно простой ситуацией. Добавим в начало документа три поля, задающие автора документа, дату и время:

    В этой процедуре добавляются три пустых абзаца в начало документа, а затем добавляются три поля. Затем демонстрируется еще один способ работы с полями, когда вначале задается пустое поле, а потом в нем печатается текст, определяющий это поле. Конечно, это должен быть разумный текст, определяющий тип поля и его характеристики. Так, зачастую, работают с полями вручную. Заметьте, необходимо обновить это поле, чтобы поле отражало значение результата. Печать результатов до обновления и после обновления позволяет проследить за изменениями значений полей. Приведем результаты отладки:

    Работа с фрагментами

    StoryRanges(Range) — эта коллекция представляет совокупность частей документа, называемых фрагментами (Story). Количество различных фрагментов документа фиксировано. Нельзя добавлять элементы в эту коллекцию обычным способом, используя метод Add . Фрагменты появляются в коллекции, когда создается соответствующая часть документа. В этот момент определяется и тип фрагмента. Фрагменты имеют тип, задаваемый константами из перечисления wdStoryType . Главный фрагмент, конечно, — текст документа, тип которого задается константой wdMainTextStory . Фрагментами других типов являются комментарии, ссылки, колонтитулы. Заметьте: сам фрагмент является объектом Range . Так что благодаря фрагментам можно, например, работать с коллекцией комментариев, как с единой областью.

    Приведем пример, где анализируются типы фрагментов активного документа:

    Тестовый документ состоит из фрагментов четырех типов, так как он, кроме текста, содержит комментарии и два типа ссылок. Вот результаты отладочной печати:

    Переменные, которые живут долго

    У переменных век не долог. Локальные переменные, как правило, заканчивают существование в момент окончания работы процедуры, в которой они описаны. Глобальные переменные живут дольше, некоторые из них могут быть доступными в разных программных проектах системы документов в процессе работы с этими документами.

    Однако и локальные и глобальные переменные «умирают» по окончании сеанса работы. Для того чтобы сохранять данные между сеансами работы, необходимо использовать файлы, базы данных и другие внешние источники даных. Замечу, что, конечно, есть еще возможность хранить данные, как часть самого документа, например, в таблицах Word или Excel. Но сейчас мы поговорим еще об одной интересной возможности, предоставляемой при работе с офисными документами. С каждым из документов можно связать коллекцию переменных типа Variant коллекцию Variables(Variable). Эта коллекция для программистов важна — ведь время жизни входящих в нее переменных совпадает со временем жизни документа. По существу речь идет о некотором специальном файле переменных, жестко связанном с самим документом и хранящимся вместе с ним. Тем самым появляется возможность сохранять информацию о работе документе между сеансами. Применения этого полезного средства могут быть самыми разными. Можно сохранять предпочтения, сделанные пользователем при первом сеансе работы с документом, различные настройки документа и так далее. Другое применение связано с предоставлением документа во временное владение с ограничением числа возможных запусков. Например, можно иметь счетчики, подсчитывающие количество вызовов некоторой процедуры и в зависимости от значения счетчика по-разному определять дальнейшую работу с данным документом. Переменные, входящие в коллекцию Variables , создаются не так, как обычные переменные, нет необходимости в их описании в разделе объявлений какого либо модуля. Они имеют фиксированный тип Variant и создаются методом Add , типичным для создания элементов коллекций. Этот метод имеет достаточно прозрачный синтаксис:

    Читать еще:  Create new password

    В момент создания задается имя переменной и, возможно, инициализирующее ее значение. Тип, как я уже говорил, установлен по умолчанию.

    Вот несколько процедур, демонстрирующих работу с такими переменными. В частности, я показываю возможность отключения демо версии системы после завершения разрешенного числа запусков. Начнем с процесса создания переменной, являющейся счетчиком, следящим за числом запусков. Взгляните на соответствующую процедуру и вызываемую в ней функцию:

    При попытке повторного добавления одной и той же переменной в коллекцию Variables возникает ошибка. В тоже время процедура, в которой происходит добавление, может выполняться многократно. Поэтому я предусматриваю соответствующую проверку на существование переменной с заданным именем в коллекции Variables . Может возникнуть вопрос, куда поместить процедуру CreateVar , создающую переменную. Я поместил ее в процедуру, обрабатывающую событие «Open» документа, но можно упрятать этот вызов и более глубоко. Рассмотрим теперь, как происходит работа с переменной Counter :

    Экспериментируя с тестовым документом, я открывал и закрывал его многократно, время от времени, вызывая процедуру CheckVar . После 11 ее запусков нормальное выполнение было прервано и выдалось предупреждающее сообщение:

    увеличить изображение: увеличить изображение,
    Рис. 1.17. Документ в момент выдачи предупреждающего сообщения.

    ИТ-записки Чорнага кашака

    Язык программирования самого высокого уровня содержит всего несколько команд для управления программистами

    15 мар. 2010 г.

    Использование полей и закладок при работе с MS Word из Delphi

    В предыдущей заметке «Поиск и замена текста в документе MS Word из Delphi» я рассказывал, как дорабатывал старый модуль, который генерирует клиентам компании письма в формате MS Word с помощью поиска и замены текста. Сдав модуль заказчикам, я в свободное от работы время, переделал его. Вместо поиска и замены использовал поля с переменными (DocVariable).
    В шаблон письма с помощью макроса добавил переменные

    Sub AddFields()
    ThisDocument.Variables.Add «FIO», «FIO»
    ThisDocument.Variables.Add «ADDRESS», «ADDRESS»
    .
    End Sub

    и расставил поля по тексту шаблона. В макросе у метода Add первый параметр – название переменной, а второй – ее значение. Я специально сделал их одинаковыми, чтобы пользователям было проще и нагляднее редактировать шаблоны.
    Затем внес изменения в методы модуля работающие с MS Word. Если опустить все детали и различную логику, то упрощенно работа с MS Word выглядит так:

    Var
    wa: WordApplication;
    ovDotName, ovFileName: OleVariant;
    i: Integer;
    q: TSDQuery;
    .
    begin
    .
    wa := CreateComObject(CLASS_WordApplication) as _Application;
    ovDotName := ‘какой то шаблон.dot’;
    wa.Documents.Add(ovDotName, EmptyParam, EmptyParam, EmptyParam);

    For i := 0 to q.FieldCount-1 do
    MSWordSetVariable(q.Fields[i].FieldName, q.Fields[i].AsString);
    .
    ovFileName := ‘письмо любимому клиенту.doc’;
    wa.ActiveDocument.SaveAs(ovFileName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
    .

    Вот такая логика у индусов, писавших этот кусок MS Word.

    После присвоения значений всем переменным, осталось только дать команду полям обновиться новыми значениями переменных. Для этого в VBA у коллекции объектов полей (Fields) есть метод Update:

    А для того, чтобы избежать дальнейшего обновления полей, избавимся от их связи с переменными:

    У каждого структурного элемента документа (заметки, колонтитула, сноски и т.д.) своя коллекция объектов полей, поэтому, если документ, как у меня, состоит из разных структурных элементов, то методы Update и Unlink необходимо вызвать для каждого из этих элементов. Для этого перебираем все элементы коллекции StoryRanges.

    procedure MSWordUpdateStoryRanges;
    Var
    StoryRanges: Word2000.StoryRanges;
    StoryRange: Word2000.Range;
    iStoryIndex: integer;
    Begin
    StoryRanges := wa.ActiveDocument.StoryRanges;
    For iStoryIndex := wdMainTextStory to wdFirstPageFooterStory do
    Try
    StoryRange := StoryRanges.Item(iStoryIndex);
    If StoryRange <> nil then
    begin
    StoryRange.Fields.Update;
    StoryRange.Fields.Unlink;

    While (StoryRange.NextStoryRange <> nil) do
    begin
    StoryRange := StoryRange.NextStoryRange;
    StoryRange.Fields.Update;
    StoryRange.Fields.Unlink;
    end;
    end;
    Except
    StoryRange := nil;
    End;
    End;

    И вызываю ее перед сохранением документа.

    Все бы ничего, но часть текста передаваемого из программы в MS Word необходимо было выводить жирным шрифтом. А это через переменные не сделать 🙁 В подобном случае «поиск и замену текста» можно заменить на «переход к закладке и вывод текста». Например, в шаблон вставляем закладку с именем ‘писать текст сюда’, а в программе пишем:

    Вот и все 🙂
    Раннее связывание и использование полей/закладок дало существенный рост скорости генерации писем. Если на 500-х различных документах этого было почти не заметно, то при генерации 15 000 документов, прирост скорости составил 30% (специально проверил несколько раз на одних и тех же исходных данных).

    Как вставлять встроенные и пользовательские дополнительные свойства в документ Word

    В прошлых статьях мы показывали, как настраивать дополнительные свойства и создавать пользовательские свойства в документе Word. Эти свойства можно вставить при помощи экспресс-блока Поле (Field). Что полезно, когда есть слова, фразы или значения, которые часто используются в документах.

    Если слово, фразу или значение, которые многократно используются в документе, планируется изменять в будущих редакциях этого документа, то использование встроенного или пользовательского свойства будет весьма полезным. Вам достаточно изменить значение свойства только в одном месте, чтобы оно изменилось сразу во всём документе.

    Чтобы вставить значение встроенного или пользовательского свойства, поставьте курсор в то место, куда его нужно вставить, и откройте вкладку Вставка (Insert).

    Примечание: При вставке пользовательского свойства в документ, вставлено будет только его значение. Если Вы хотите дополнить (расшифровать) значение именем свойства, введите нужный текст прежде, чем вставлять само значение.

    В разделе Текст (Text) вкладки Вставка (Insert) нажмите кнопку Экспресс-блоки (Quick Parts).

    Примечание: Подписи этих кнопок могут не отображаться, когда окно Word открыто недостаточно широко. Если Вы не видите подпись кнопки, найдите иконку, указанную курсором на изображении ниже.

    В появившемся меню нажмите Поле (Field).

    В выпадающем списке Категории (Categories) выберите О документе (Document Information).

    В списке Поля (Field names) кликните по DocProperty. В разделе Свойства поля (Field Properties), который расположен по центру диалогового окна, под заголовком Свойство (Property) появится список всех доступных свойств документа (как встроенных, так и добавленных Вами). Выберите из списка пользовательское свойство, которое хотите добавить в документ, и нажмите ОК.

    Значение будет вставлено туда, где находится курсор.

    Изменив значение пользовательского свойства, необходимо обновить поля, вставленные в документ, чтобы они отобразили это изменение. Для этого нужно выделить все поля в документе (или полностью весь документ) и нажать клавишу F9.

    Ссылка на основную публикацию
    Adblock
    detector