Обзор полей
Aspose.Words - это библиотека классов, предназначенная для обработки документов Microsoft Word на стороне сервера и поддерживающая поля следующими способами:
- все поля в документе сохраняются при открытии/сохранении и преобразовании
- можно обновить результаты по большинству полей
В этой статье мы узнаем больше о структуре поля, полях, поддерживаемых в Aspose.Words, и деталях работы с такими полями.
Структура полей
Поле состоит из:
- Узлы “Начало поля” и “разделитель” используются для отображения содержимого, составляющего код поля (обычно в виде обычного текста).
- Разделитель полей и конец поля отображают результат работы с полем. Это может быть содержимое различных типов - от фрагментов текста до абзацев и таблиц.
- Некоторые поля могут не иметь разделителя, что означает, что все содержимое составляет код поля.
- Код поля определяет поведение поля и состоит из идентификатора поля и часто других параметров, таких как названия полей и переключатели.
- Поле “Результат” содержит самую последнюю оценку поля. Это значение сохраняется в поле “результат” и отображается пользователю. В некоторых полях результаты могут отсутствовать, поэтому в документе ничего не будет отображаться. Аналогично, некоторые поля, возможно, еще не обновлены, поэтому результат также не будет получен.

Содержимое, составляющее код поля, хранится в виде Run узлов между FieldStart и FieldSeparator. Результат работы с полем хранится между узлами FieldSeparator и FieldEnd и может состоять из различных типов содержимого. Обычно поле результата содержит только текст, состоящий из Run узлов, однако возможно, что узел FieldEnd находится в совершенно другом абзаце, и, таким образом, поле результата состоит из узлы блочного уровня например, узлы Table и Paragraph.
Вот представление о том, как хранится поле в Aspose.Words, на примере “DocumentExplorer”.

Поля в объектной модели документа Aspose.Words (DOM)
Когда документ загружается в Aspose.Words, поля документа загружаются в объектную модель документа Aspose.Words как набор отдельных компонентов (узлов). Одно поле загружается как набор узлов FieldStart, FieldSeparator и FieldEnd вместе с содержимым между этими узлами. Если у поля нет результата field, то не будет узла FieldSeparator. Все эти узлы всегда находятся в строке (как дочерние для Paragraph или SmartTag).
В Aspose.Words каждый из узлов FieldXXX является производным от FieldChar. Этот класс предоставляет свойство для проверки типа поля, представленного указанным узлом, с помощью свойства FieldType. Например, FieldType.FieldMergeField представляет поле объединения в документе.
В документе Word существуют некоторые особые поля, которые не импортируются в Aspose.Words как набор из FieldXXX узлов. Например, поле LINK и поле INCLUDEPICTURE импортируются в Aspose.Words как объект Shape. Этот объект предоставляет свойства для работы с данными изображения, которые обычно хранятся в этих полях. Чтобы импортировать поле INCLUDEPICTURE в качестве узлов FieldXXX, параметр PreserveIncludePictureField должен быть указан как true.
Поля формы также импортируются в Aspose.Words как их собственный специальный класс. Класс FormField представляет поле формы в документе Word и предоставляет дополнительные методы, характерные для поля формы.
Поддерживаемые поля
В текущей версии Aspose.Words поддерживается вычисление следующих полей:
- = (формула)
ADDRESSBLOCKASKAUTHORAUTONUMAUTONUMLGLAUTONUMOUTAUTOTEXTBARCODECOMMENTSCOMPARECREATEDATEDATABASEDATEDISPLAYBARCODEDOCPROPERTYDOCVARIABLEEDITTIMEEQFILENAMEFILESIZEFILLINFORMCHECKBOXFORMDROPDOWNFORMTEXTGLOSSARYGOTOBUTTONGREETINGLINEHYPERLINKIFIMPORTINCLUDEINCLUDEPICTUREINCLUDETEXTINDEXINFOKEYWORDSLASTSAVEDBYLISTNUMMACROBUTTONMERGEBARCODEMERGEFIELDMERGERECMERGESEQNEXTNEXTIFNOTEREFNUMCHARSNUMPAGESNUMWORDSPAGEPAGEREFPRINTDATEQUOTEREFREVNUMSAVEDATESECTIONSECTIONPAGESSEQSETSHAPESKIPIFSTYLEREFSUBJECTSYMBOLTEMPLATETIMETITLETOATOCUSERADDRESSUSERINITIALSUSERNAME
Сложный синтаксический анализ полей
Aspose.Words соответствует способу обработки полей в Microsoft Word, и в результате он корректно обрабатывает:
- вложенные поля:
IF { =OR({ COMPARE { =2.5 +PRODUCT(3,5 ,8.4) } > 4}, { =2/2 }) } = 1 "Credit not acceptable" "Credit acceptable" - аргумент поля может быть результатом использования вложенного поля
- поля могут быть вложены как в код поля, так и в результат поля
- пробелы/без пробелов, кавычки/без кавычек, экранирующие символы в полях и т.д.:
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 поддерживает следующие параметры форматирования:
- @ – форматирование даты и времени
- \# – форматирование чисел
- \\\\* Заглавные буквы
- \\\\* Первый колпачок
- \\\\* Ниже
- \\\\* Верхний
- \\\\* CHARFORMAT – форматирование результата в соответствии с первым символом кода поля
- \\\\* MERGEFORMAT – отформатировать результат в соответствии с тем, как был отформатирован старый результат
Форматирование даты и чисел в полях
Когда Aspose.Words вычисляет результат работы с полем, ему часто требуется преобразовать строку в число или значение даты, а также отформатировать ее обратно в строку.По умолчанию Aspose.Words использует текущую структуру потока для выполнения синтаксического анализа и форматирования при вычислении значений полей во время обновления поля и mail merge. Существуют также опции, представленные в виде класса FieldOptions, который позволяет дополнительно контролировать, какой регион используется при обновлении поля.
- по умолчанию свойству FieldUpdateCultureSource присвоено значение CurrentThread, что позволяет форматировать поля, используя текущие параметры потока
- этому свойству можно присвоить значение FieldCode, чтобы вместо него для форматирования использовался язык, указанный в коде поля
Форматирование с использованием культуры текущего потока
Чтобы управлять культурой, используемой при расчете поля, просто установите для свойства CurrentCulture значение культуры по вашему выбору перед вызовом расчета поля.
В следующем примере кода показано, как изменить региональные параметры, используемые в полях форматирования во время обновления:
Пример
Использование существующих стандартов для форматирования полей позволяет системе легко и последовательно управлять форматированием всех полей в документе во время обновления полей.
Форматирование с использованием региональных параметров документа
С другой стороны, Microsoft Word форматирует каждое отдельное поле на основе языка текста, содержащегося в поле (в частности, на основе кода поля). Иногда при обновлении полей это может быть желательным, например, если у вас есть глобализированные документы, содержащие содержимое на многих разных языках, и вы хотите, чтобы каждое поле соответствовало языковому стандарту, используемому в тексте. Aspose.Words также поддерживает эту функциональность.
Класс Document предоставляет свойство FieldOptions, которое содержит элементы, которые можно использовать для управления обновлением полей в документе.
В следующем примере кода показано, как указать, из какого источника выбирается региональная структура, используемая для форматирования даты при обновлении поля, и mail merge:
Пример