Автоматически обновлять поле формулы после создания документа Open XML Word - PullRequest
6 голосов
/ 26 июня 2010

У меня есть библиотека, которая генерирует документы Word с использованием OpenXML SDK, одна из функций библиотеки - создание таблиц с формулами в последней строке (например, SUM(ABOVE)).

Word имеет эти встроенные функции, но при создании документа я должен предположить, что Word не установлен на машине.

Проблема в том, что если я просто сгенерирую таблицу и поле формулы, он не будет обновляться автоматически при открытии документа, пользователь должен будет открыть документ и вручную выбрать «поле обновления», чтобы функция быть рассчитанным.

Есть ли способ сделать это в коде (без необходимости вычисления функции вручную)?

Ответы [ 3 ]

6 голосов
/ 26 июня 2010

Нет, это по замыслу.Подробнее см. Какие поля обновляются при открытии, повторной разбивке или печати документа .

Это верно и для любого ручного ввода (например, если у вас было 10 в A1, 10 в A2, вставив =SUM(ABOVE) в A3, у вас будет 20. Но если вы измените A1 на 15, A3 не будет обновляться автоматически, если только вы не сделаете это вручную).

Единственный способ обойти этонадстройка (VSTO, VBA и т. д.) для приема события Document_Open на клиентских компьютерах и запуска некоторого кода для обновления всех полей или создания приложения Interop на сервере, который открывает документ, отображает его с некоторым кодом, а затемсохраняет его перед отправкой дальше.

2 голосов
/ 31 марта 2016

Вы видели это, UpdateFieldsOnOpen класс. (https://msdn.microsoft.com/en-us/library/cc861799) Это должно принудительно обновить все поля при первом открытии документированного документа с помощью приложения, которое может его обновить (например, Word).

Полагаю, что каждое поле, для которого установлен флаг Dirty со значением true, получит обновление, но не указывайте меня на этом;)

0 голосов
/ 06 октября 2016

Можно установить значение UpdateFieldsOnOpen, при открытии документа Word спросит вас, что вы хотите обновить.См. Эту статью для более подробной информации: http://www.samuraiprogrammer.com/blog/2010/08/09/OpenXMLHowToRefreshAFieldWhenTheDocumentIsOpened.aspx

...