Автоматическое обновление поля формулы после создания документа Open XML Word
У меня есть библиотека, которая генерирует документы Word с помощью OpenXML SDK, одной из функций библиотеки является генерация таблиц с формулами в последней строке (например, SUM(ABOVE)
).
Word имеет эти встроенные функции, но при создании документа я должен предположить, что Word не установлен на машине.
Проблема в том, что если я просто создам таблицу и поле формулы, оно не будет обновляться автоматически при открытии документа, пользователь будет нужно открыть документ и вручную выбрать "обновить поле" для функции, которая будет вычисляться.
Есть ли способ сделать это в коде (без необходимости вычислять функцию вручную)?
3 ответа:
Нет, это сделано специально. Дополнительные сведения см. В разделе , какие поля обновляются при открытии, переназначении или печати документа.
Это верно и для любого ручного ввода (например, если бы у вас было 10 в A1, 10 в A2, вставлено
=SUM(ABOVE)
в A3, у вас было бы 20. Но если вы изменили A1 на 15, A3 не будет обновляться автоматически, пока вы не сделаете это вручную).Единственный способ обойти это-создать надстройку (VSTO, VBA и т. д.) чтобы потопить событие
Document_Open
на клиентских компьютерах и запустить некоторый код чтобы обновить все поля или создать приложение взаимодействия на сервере, которое открывает документ, визуализирует его с некоторым кодом, а затем сохраняет его перед отправкой дальше.
Вы видели этот класс,
UpdateFieldsOnOpen
. (https://msdn.microsoft.com/en-us/library/cc861799 ) он должен принудительно обновить все поля при первом открытии документа с помощью приложения, которое может его обновить (например, Word).Я предполагаю, что каждое поле, имеющее флаг
Dirty
, установленный в true, получит обновление, но не цитируйте меня на это ;)
Вы можете установить значение
UpdateFieldsOnOpen
, при открытии документа Word спросит вас, что вы хотите обновить. Смотрите эту статью для получения более подробной информации: http://www.samuraiprogrammer.com/blog/2010/08/09/OpenXMLHowToRefreshAFieldWhenTheDocumentIsOpened.aspx