Обзор полей
Обычно поле, вставленное в Microsoft Word, уже содержит актуальное значение. Например, если поле представляет собой формулу или номер страницы, оно будет содержать правильное вычисленное значение для данной версии документа. Но если у вас есть приложение, которое генерирует или изменяет документ с полями (например, объединяет два документа или заполняет их данными), то для того, чтобы документ был полезным, все поля в идеале должны быть обновлены.
Поле состоит из:
- Узлы “Начало поля” и “разделитель” используются для отображения содержимого, составляющего код поля (обычно в виде обычного текста)
- Разделитель полей и конец поля отображают результат работы с полем. Это может быть содержимое различных типов - от фрагментов текста до абзацев и таблиц.
- Некоторые поля могут не иметь разделителя, что означает, что все содержимое составляет код поля.
- Код поля определяет поведение поля и состоит из идентификатора поля и часто других параметров, таких как название поля и переключатели.
- Поле результат содержит самую последнюю оценку поля. Это значение сохраняется в поле результат и отображается пользователю. В некоторых полях может отсутствовать поле результат, поэтому в документе ничего не будет отображаться. Аналогично, некоторые поля, возможно, еще не обновлены, поэтому результат также не будет получен.
Вот представление о том, как хранится поле в Aspose.Words, с использованием примера “DocumentExplorer”, который можно найти на Github.
Aspose.Words - это библиотека классов, предназначенная для обработки документов Microsoft Word на стороне сервера и поддерживающая поля следующими способами:
- Все поля в документе сохраняются при открытии/сохранении и преобразовании.
- Можно обновить результаты по некоторым из наиболее популярных полей.
Поля в Microsoft Word
Поля в документах Microsoft Word сложны. Существует более 50 типов полей (для каждого из них требуется своя процедура вычисления результата), формулы и выражения, закладки и ссылки, функции и различные переключатели. Поля также могут быть вложенными. Обычно при открытии документа результат работы с полем (значение поля) отображается для всех полей в документе. Вы можете переключить отображение результатов работы с полем или кодов полей в Microsoft Word для всех полей, нажав ALT+F9.
Код поля | Результат поля |
---|---|
Вставка полей в Microsoft Word
Чтобы вставить поле в Microsoft Word:
- Нажмите на меню Insert.
- Нажмите на выпадающее меню Quick Parts
- Выберите Field
- Перед вами откроется экран, на котором вы сможете ввести информацию о поле. Слева вы увидите список возможных полей, а справа - экран для визуального редактирования свойств поля.
- Кроме того, вы можете нажать кнопку Field Codes, которая позволяет вам напрямую ввести код поля.
- Переключатели также можно установить с помощью кнопки Options
- Используя любой из этих способов, заполните нужные поля соответствующей информацией и нажмите Ok.
- Поле вставляется в документ в текущем положении курсора.
Обновление полей в Microsoft Word
Чтобы обновить одно поле в Microsoft Word:
- Переместите курсор в поле, которое вы хотите обновить.
- Нажмите F9, чтобы обновить поле.
Чтобы обновить все поля в Microsoft Word:
- Нажмите Ctrl+A, чтобы выбрать все содержимое документа.
- Нажмите F9, чтобы обновить все поля, найденные в выделенной области.
Переключение между отображением кода поля и результатом ввода в поле
Чтобы переключить коды полей для одного поля в Microsoft Word:
- Переместите курсор в нужное поле.
- Нажмите SHIFT+F9, чтобы переключить код поля только для этого поля.
Чтобы переключить коды полей для всех полей в Microsoft Word:
- Нажмите ALT+F9
Преобразование полей в статический текст в Microsoft Word
Чтобы преобразовать динамическое поле в статический текст в Microsoft Word:
- Переместите курсор в поле, которое вы хотите преобразовать.
- Нажмите Ctrl+Shift+F9, чтобы преобразовать поля в статический текст.
Удаление поля в Microsoft Word
Чтобы удалить поле в Microsoft Word:
- Выберите все содержимое, составляющее поле. Если отображаются коды полей, то также необходимо выбрать открывающую и закрывающую фигурные скобки.
- Нажмите Delete, чтобы удалить все поле целиком.
Поля в Aspose.Words
Когда документ загружается в Aspose.Words, поля документа загружаются в объектную модель документа Aspose.Words в виде набора отдельных компонентов (узлов). Одно поле загружается как набор узлов FieldStart, FieldSeparator и FieldEnd вместе с содержимым между этими узлами. Если у поля нет результата field, то не будет узла FieldSeparator. Все эти узлы всегда находятся в строке (как дочерние для Paragraph или SmartTag.
Содержимое, составляющее код поля, хранится в виде Run узлов между FieldStart и FieldSeparator. Результат поля хранится между узлами FieldSeparator и FieldEnd и может состоять из различных типов содержимого. Обычно поле результата содержит только текст, состоящий из узлов Run, однако возможно, что узел FieldEnd находится в совершенно другом абзаце, и, таким образом, поле результата также состоит из узлов блочного уровня, таких как узлы Table и Paragraph.
В Aspose.Words каждый из FieldXXX узлов является производным от FieldChar. Этот класс предоставляет свойство для проверки типа поля, представленного указанным узлом, с помощью свойства FieldChar.field_type. Например, FieldType.FIELD_MERGE_FIELD представляет поле объединения в документе.
В документе Word существуют некоторые особые поля, которые не импортируются в Aspose.Words как набор узлов FieldXXX. Например, поле LINK
и поле INCLUDEPICTURE
импортируются в Aspose.Words как объект Shape. Этот объект предоставляет свойства для работы с данными изображения, которые обычно хранятся в этих полях.
Поля формы также импортируются в Aspose.Words как их собственный специальный класс. Класс FormField представляет поле формы в документе Word и предоставляет дополнительные методы, характерные для поля формы.
Поля, поддерживаемые во время обновления
В текущей версии Aspose.Words поддерживается вычисление следующих полей:
- = (поле формулы)
ADDRESSBLOCK
AUTHOR
COMPARE
CREATEDATE
DATE
DOCPROPERTY
DOCVARIABLE
GREETINGLINE
IF
INCLUDETEXT
MERGEFIELD
MERGEREC
MERGESEQ
NEXT
NEXTIF
NUMPAGES
PAGE
PAGEREF
REF
SECTION
SECTIONPAGES
SEQ
SET
STYLEREF
TIME
TITLE
TOA
TOC
(including TOT and TOF)- TC
Сложный синтаксический анализ
Aspose.Words повторяет способ, которым Microsoft Word обрабатывает поля, и в результате корректно обрабатывает:
- Вложенные поля
: IF { =OR({ COMPARE { =2.5 +PRODUCT(3,5 ,8.4) } > 4}, { =2/2 }) } = 1 "Credit not acceptable" "Credit acceptable"
- Аргумент Field может быть результатом использования вложенного поля.
- Поля могут быть вложены как в код поля, так и в результат поля.
- Пробелы/без пробелов, кавычки/без кавычек, экранирующие символы в полях и т.д.:
MERGEFIELD \f"Text after""Field \n\ame with \" and \\\ and \\\*"\bTextBefor\e
- Поля, охватывающие несколько абзацев.
Поля формул
Aspose.Words обеспечивает очень серьезную реализацию движка формул и поддерживает следующее:
- Арифметические и логические операторы:
=(54+4*(6-77)-(5))+(-6-5)/4/5
- Функции:
=ABS(-01.4)+2.645/(5.6^3.5)+776457 \\\# "#,##0"
- Ссылки на закладки:
=IF(C>4, 5,ABS(A)*.76) +3.85
- Переключатели форматирования чисел:
=00000000 \\\# "$#,##0.00;($#,##0.00)"
Поддерживаются следующие функции в выражениях: ABS
, AND
, AVERAGE
, COUNT
, DEFINED
, FALSE
, IF
, INT
, MAX
, MIN
, MOD
, NOT
, OR
, PRODUCT
, ROUND
, SIGN
, SUM
, TRUE.
IF
and COMPARE
Fields
Лишь некоторые из выражений IF
, которые Aspose.Words может легко вычислить, должны дать вам представление о том, насколько мощной является эта функция:
IF 3 > 5.7^4+MAX(4,3) True False
IF "abcd" > "abc" True False
IF "?ab*" = "1abdsg" True False
IF 4 = "2*2" True False
COMPARE 3+5/34 < 4.6/3/2
DATE
and TIME
Fields
Aspose.Words поддерживает все параметры форматирования даты и времени, доступные в Microsoft Word, вот некоторые примеры:
DATE @ "d-MMM-yy"
DATE @ "d/MM/yyyy h:mm am/pm
Mail Merge Поля
Aspose.Words не накладывает ограничений на сложность полей Mail Merge в ваших документах, поддерживает вложенные поля IF
и поля формул и даже может вычислять название объединяемого поля с помощью формулы.
Несколько примеров полей Mail Merge, которые поддерживает Aspose.Words:
- Mail merge переключатели полей:
MERGEFIELD FirstName \\\\\\\\* FirstCap \b "Mr. "
- Вложенные поля слияния в формуле:
IF {
MERGEFIELDValue1 } >= {
MERGEFIELDValue2 } True False
- Вычислите имя поля слияния во время выполнения:
MERGEFIELD {
IF{
MERGEFIELDValue1 } >= {
MERGEFIELDValue2 } FirstName"LastName" }
- Условный переход к следующей записи в источнике данных:
NEXTIF {
MERGEFIELDValue1 } <= { =IF(-2.45 >= 6*{
MERGEFIELDValue2 }, 2, -.45) }
Переключатели форматов
Поле в документе может иметь параметры форматирования, которые определяют, как должно быть отформатировано результирующее значение. Aspose.Words поддерживает следующие параметры форматирования:
- @ - форматирование даты и времени
- \# - форматирование чисел
- \\\\* Caps
- \\\\* FirstCap
- \\\\* Lower
- \\\\* Upper
- \\\\* CHARFORMAT – форматирование результата в соответствии с первым символом кода поля.
- \\\\* MERGEFORMAT – отформатируйте результат в соответствии с тем, как был отформатирован старый результат.
Форматирование даты и чисел в полях
Когда Aspose.Words вычисляет результат работы с полем, ему часто требуется преобразовать строку в число или значение даты, а также отформатировать ее обратно в строку.По умолчанию Aspose.Words использует текущую структуру потока для выполнения синтаксического анализа и форматирования при вычислении значений полей во время обновления поля и mail merge. Существуют также опции, представленные в виде класса FieldOptions, который позволяет дополнительно контролировать, какой регион используется при обновлении поля.
- По умолчанию свойству FieldOptions.field_update_culture_source присвоено значение FieldUpdateCultureSource.CURRENT_THREAD, что позволяет форматировать поля, используя текущие параметры потока.
- Этому свойству можно присвоить значение FieldUpdateCultureSource.FIELD_CODE, чтобы вместо него для форматирования использовался язык, указанный в коде поля.
Форматирование с использованием культуры текущего потока
Чтобы управлять культурой, используемой при расчете поля, просто используйте метод locale.setlocale, чтобы задать культуру по вашему выбору перед вызовом расчета поля. В приведенном ниже примере показано, как изменить региональные параметры, используемые в полях форматирования во время обновления.
Использование существующих стандартов для форматирования полей позволяет системе легко и последовательно управлять форматированием всех полей в документе во время обновления полей.
Форматирование с использованием региональных параметров документа
С другой стороны, Microsoft Word форматирует каждое отдельное поле на основе языка текста, найденного в поле (в частности, на основе кода поля). Иногда при обновлении полей это может быть желательным, например, если у вас есть глобализированные документы, содержащие содержимое на многих разных языках, и вы хотите, чтобы каждое поле соответствовало языковому стандарту, используемому в тексте. Aspose.Words также поддерживает эту функциональность.
Класс Document предоставляет свойство field_options, которое содержит элементы, которые можно использовать для управления обновлением полей в документе. В приведенном ниже примере показано, как указать, где выбирается региональная структура, используемая для форматирования даты при обновлении полей, и Mail Merge.
Поиск кода поля и результата работы с полем
Поле, вставленное с помощью DocumentBuilder.insert_field, возвращает объект Field. Это класс façade, который предоставляет полезные методы для быстрого поиска таких свойств поля. Примечание. Если вы ищете в документе только названия объединяемых полей, то вместо этого можете использовать встроенный метод MailMerge.get_field_names. В приведенном ниже примере показано, как получить названия всех объединяемых полей в документе.
Как переименовать объединяемые поля
В приведенном ниже примере показано, как переименовать объединяемые поля в документе Word.