Для версии Microsoft Word 2000 в данной статье см.
209227.
Для версии Microsoft Word 97 в данной статье см.
181816.
Для версии Microsoft Word 7.0 в данной статье см.
106388.
Обзор
В данной статье описывается, как хранить и извлекать переменные документа при использовании Microsoft Word.
Дополнительные сведения
Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации и без явных или подразумеваемых гарантий. Это включает, но не ограничиваясь, подразумеваемые гарантии товарной пригодности или пригодности для определенной цели. В данной статье предполагается, что вы знакомы с демонстрируемым языком программирования и средствами, которые используются для создания и отладки. Сотрудники службы поддержки Майкрософт могут объяснить возможности конкретной процедуры, но не выполнять модификации примеров для обеспечения дополнительных функциональных возможностей или создания процедур для определенных требований.
Дополнительные сведения о том, как использовать примеры кода в этой статье щелкните следующий номер статьи базы знаний Майкрософт:
290140 OFFXP: запуск кода примера из статей базы знаний
Задавать и извлекать содержимое строковой переменной в документ или шаблон можно использовать Visual Basic для приложений Microsoft коллекции переменных .
Кроме того можно использовать поле DocVariable для извлечения значения переменной документа после его для отображения в документе Word.
Как задавать и извлекать значения переменной документа
Следующий пример макроса использует свойство переменные для хранения, а затем извлечь значение строковой переменной с именем «FullName» с текущим документом.
Sub GetSetDocVars()Dim fName As String
fName = "Jeff Smith"
' Set contents of variable "fName" in a document using a document
' variable called "FullName".
ActiveDocument.Variables.Add Name:="FullName", Value:=fName
' Retrieve the contents of the document variable.
MsgBox ActiveDocument.Variables("FullName").ValueEnd Sub
Примечание: Если в документе уже задано имя переменной появляется следующее сообщение об ошибке:
Ошибка во время выполнения «5903»: Имя переменной уже существует.
Необходимо удалить имя или просто сбросить значение аргумента.
Удаление переменной документа
Следующий пример макроса использует свойство Variables в первом наборе и получить значение переменной документа и затем удалить переменную из активного документа.
Sub GetSetDeleteDocVars()Dim fName As String
fName = "Jeff Smith"
' Set contents of variable "fName" in a document using a document
' variable called "FullName."
ActiveDocument.Variables.Add Name:="FullName", Value:=fName
' Retrieve the contents of the document variable.
MsgBox ActiveDocument.Variables("FullName").Value
' Delete the variable.
ActiveDocument.Variables("FullName").DeleteEnd Sub
Как извлечь значение переменной документа с помощью поля DocVariable
Следующий пример макроса использует свойство Variables для задания переменной документа. Следующий пример макроса являются действия, чтобы использовать поле DocVariable для извлечения значения в содержимое одного документа.
Sub GetSetDocVars()Dim fName As String
fName = "Jeff Smith"
' Set contents of variable "fName" in a document using a document
' variable called "FullName."
ActiveDocument.Variables.Add Name:="FullName", Value:=fNameEnd Sub
Чтобы использовать поле DocVariable, выполните следующие действия.
-
В меню Вставка щелкните поле.
Примечание. В Microsoft Office Word 2007 выберите в группе текст на вкладке ВставитьЭкспресс-блоки и выберите поле.
-
В списке категории выберите Документ автоматизации.
-
В списке поле выберите DocVariable.
-
В поле Новое имя в разделе свойств полявведите имя переменной документа.
Примечание: Если вы видите Дополнительные свойства поля , а не
Свойства полянажмите кнопку Скрыть коды. -
Нажмите кнопку ОК.
Если необходимо сохранить значение между сеансами работы макроса можно хранить значения, используя любой из следующих методов:
-
Свойство PrivateProfileString используется для хранения значений в файле настройки закрытого.
Дополнительные сведения о свойстве PrivateProfileString в редакторе Visual Basic нажмите кнопку Справки Microsoft Visual Basic в меню Справка выберите Свойство PrivateProfileString введите в поле помощника Office или мастера ответов, а затем Нажмите кнопку Поиск для просмотра раздела.
-
Используйте свойство переменные для хранения значений в документе.
Дополнительные сведения о свойстве переменные в редакторе Visual Basic меню Справка выберите команду Справка по Microsoft Visual Basic , введите Свойство Variables в поле помощника Office или мастера ответов и нажмите кнопку поиска Просмотрите раздел.
-
Использование Visual Basic для приложений операторы Ввода-вывода для записи в текстовый файл (например, написать инструкцию или инструкции Print ).
Дополнительные сведения о записи данных в файлы, в редакторе Visual Basic выберите команду Справка по Microsoft Visual Basic в меню Справка , введите запись данных в файлы в поле помощника Office или мастера ответов и нажмите кнопку поиска Просмотрите раздел.
-
Использование объекта AutoTextEntry для хранения значений в элемент автотекста.
Дополнительные сведения об объекте AutoTextEntry в редакторе Visual Basic меню Справка выберите команду Справка по Microsoft Visual Basic , объектом AutoTextEntry введите в поле помощника Office или мастера ответов и нажмите кнопку поиска для просмотра раздела.
Нужна дополнительная помощь?
Я делал так (пользовался формами).
1. MSWord -> RClick на панелях инструментов Ворда -> «Формы» (чтобы отобразить панель инструментов «Формы»)
2. На панели инструментов «Формы» — LClick «Текстовое поле» -> В документе появится текстовое поле (серенькое, если затенение полей формы включено)
3. RClick на появившемся поле в документе -> Свойства
4. В окне «Параменты текстового поля» -> «Параменты поля/Закладка:» вводим, например, «MyTextField1» -> ОК
5. В текстовом поле документа (сереньком) вводим какой-нибудь текст, например, «QWERTY»
6. В ВБА (Alt+F11) -> пишем:
Код: Выделить всё
Sub tt()
MsgBox ThisDocument.FormFields.Item("MyTextField1").Range.Text
End Sub
7. F5 на макросе и видим на экране «QWERTY» ! Или «ЙЦУКЕН», как у меня, что в общем-то тоже радует глаз!
Я, кстати, ещё и защиту документа включал, чтобы «никто » не мог исправить ничего, кроме данных форм…
Пойдёт? Извиняюсь, что так подробно, вдруг всё-таки кто-ньть читать будет
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
ИТ-записки Чорнага кашака
Язык программирования самого высокого уровня содержит всего несколько команд для управления программистами
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% (специально проверил несколько раз на одних и тех же исходных данных).
Оценка статьи:
Загрузка…
Adblock
detector
В Word есть несколько различных типов «переменных». Есть вещи, известные как «переменные документа», но есть и другие вещи, которые я буду называть «свойствами» — я постараюсь перечислить основные типы ниже.
В Word есть несколько мест, где вы можете найти некоторые типы свойств, но для истинных «переменных» и других типов свойств, если вы не можете использовать макросы или другой код, вам нужно будет разархивировать файл .docx и посмотрите на различные файлы там.
Места, которые вы можете посмотреть в Word 2010 (здесь не отображаются переменные документа) …
а. В «Backstage» — посмотрите на вкладку «File», «Info», и вы увидите некоторые свойства, перечисленные справа. Нажмите «Показать все свойства» в нижней части списка, и вы можете увидеть больше.
б. На вкладке Вставка, группа Текст, Быстрые детали-> Свойства вы должны увидеть список «Встроенные свойства + некоторые или все свойства, вставленные Sharepoint, если это то, что вы используете.
с. В «Информационной панели документа» (DIP). Если вы этого не видите, перейдите в меню «Файл», затем «Параметры», а затем, скажем, «Панель быстрого доступа». Выберите «Выбрать команды» в разделе «Все команды», затем найдите «Свойства», выберите его и нажмите кнопку «Добавить». Вы должны увидеть значок на панели быстрого доступа, который имеет маленькое белое «i» на круглом синем фоне. Нажмите на нее, и вы увидите либо некоторые встроенные свойства (Автор, Заголовок и т. Д.), Либо некоторые свойства «Тип контента» Sharepoint, если вы используете SharePoint. Вы можете переключаться между одним из нескольких представлений. Если затем щелкнуть раскрывающийся список в верхнем левом углу DIP и выбрать «Дополнительные свойства», вы увидите диалоговое окно с несколькими вкладками, в котором отображается
-
некоторые «встроенные» свойства
-
«пользовательские» свойства старого стиля «Пользовательский».
Для всего остального вам, вероятно, придется искать в XML в .docx. Для этого сделайте копию вашего документа. Допустим, копия называется mydoc.docx. Переименуйте его в mydoc.docx.zip, откройте zip, затем найдите несколько вещей, как предложено ниже …
а. Истинные переменные документа хранятся в папке word, в файле settings.xml, в элементе с именем w: docVars. Вы должны увидеть имя и значение для каждой переменной. Вы можете вставить значения переменных документа в ваш документ, используя поле {DOCVARIABLE variablename}.
б. Встроенные свойства документа, в том числе такие, как автор, заголовок и т. Д. В большинстве случаев значения могут быть вставлены в документ с использованием специальных полей, таких как {AUTHOR} или, в некоторых случаях, полей {DOCPROPERTY}. Хотя это немного грязно, есть стандартный список имен. Вы можете найти большинство значений в папке docProps в файлах core.xml и app.xml. Однако некоторые («Свойства титульной страницы»), если они используются, хранятся в одном из файлов «item.xml» (например, «item1.xml» в папке customXml).
с. «определяемые пользователем» пользовательские свойства старого стиля, которые состоят в основном из пар имя / значение, значения которых можно вставить в документ с помощью полей {DOCPROPERTY}, например, {DOCPROPERTY mycustomproperty}. Они отображаются в диалоговом окне Дополнительные свойства …., но в .docx они находятся в файле custom.xml в папке docProps.
д. пользовательские свойства нового стиля, также известные как «свойства Sharepoint» или «свойства типа содержимого», поскольку они часто создаются и заполняются из столбцов в списке Sharepoint. Значения хранятся в «Пользовательских частях XML» и могут быть вставлены с использованием элементов управления контентом, которые были настроены так, чтобы указывать на соответствующий бит XML. (Только Word 2007 и более поздние версии). В .docx вы найдете несколько «схем» для этих переменных и значения переменных в папке customXML, в файлах с именем «item1.xml», «item2.xml» и т. Д.
е. наконец, любой разработчик может поместить свои собственные пользовательские части XML в документ Word и подключить элементы управления контентом к элементам и атрибутам в этих пользовательских частях XML. Я не буду пытаться вдаваться в детали того, как это делается, но вы найдете данные в файлах item1.xml, item2.xml и т. Д. В customXML. Однако, чтобы найти сами элементы управления контентом, их имена и то, с чем они связаны, вам, как правило, нужно искать в папке word, например, document.xml, и, возможно, один или несколько из «header» и «footer». XML-файлы.
title | keywords | f1_keywords | ms.prod | api_name | ms.assetid | ms.date | ms.localizationpriority |
---|---|---|---|---|---|---|---|
Variables.Add method (Word) |
vbawd10.chm157614087 |
vbawd10.chm157614087 |
word |
Word.Variables.Add |
5c38d785-539b-7e6c-9cd0-cfa48e1aef33 |
06/08/2017 |
medium |
Variables.Add method (Word)
Returns a Variable object that represents a variable added to a document.
Syntax
expression.Add (Name, Value)
expression Required. A variable that represents a ‘Variables’ collection.
Parameters
Name | Required/Optional | Data type | Description |
---|---|---|---|
Name | Required | String | The name of the document variable. |
Value | Optional | Variant | The value for the document variable. |
Return value
Variable
Remarks
Document variables are invisible to the user unless a DOCVARIABLE field is inserted with the appropriate variable name. If you try to add a variable with a name that already exists in the Variables collection, an error occurs. To avoid this error, you can enumerate the collection before adding a new variable to it.
Example
This example adds a variable named Temp to the active document and then inserts a DOCVARIABLE field to display the value in the Temp variable.
With ActiveDocument .Variables.Add Name:="Temp", Value:="12" .Fields.Add Range:=Selection.Range, _ Type:=wdFieldDocVariable, Text:="Temp" End With ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
This example sets the value of the Blue variable to six. If this variable doesn’t already exist, the example adds it to the document and sets it to six.
For Each aVar In ActiveDocument.Variables If aVar.Name = "Blue" Then num = aVar.Index Next aVar If num = 0 Then ActiveDocument.Variables.Add Name:="Blue", Value:=6 Else ActiveDocument.Variables(num).Value = 6 End If
This example stores the user name (from the Options dialog box) in the template attached to the active document.
ScreenUpdating = False With ActiveDocument.AttachedTemplate.OpenAsDocument .Variables.Add Name:="UserName", Value:= Application.UserName .Close SaveChanges:=wdSaveChanges End With
See also
Variables Collection Object
[!includeSupport and feedback]