2010-06-26 1 views
4

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

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

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

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

ответ

5

Нет, это по дизайну. См. Which fields are updated when you open, repaginate, or print document.

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

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

+0

Это то, что я думал, единственная проблема, с которой я сталкиваюсь, заключается в том, что я не могу предположить, что у пользователя установлено Word на машине, поэтому мне придется придерживаться ручного расчета (к счастью, число функций ограничено). Благодаря! – willvv

2

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

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