Насколько я понимаю, ячейки с формулами в Microsoft Office Excel могут содержать вычисляемые значения при сериализации и сохранении в форматах Office Open XML (в частности, SpreadsheetML). Это, скорее всего, относится к другим типам зависимостей и функций значений из других ячеек (например, диаграммам, сводным таблицам и т. д.). Я, скорее всего, делаю что-то не так, но при обработке этих XML-документов (SpreadsheetML) внешними инструментами, которые не используют какие-либо компоненты .Net или аналогичные API-интерфейсы, предоставляемые MS, а просто напрямую манипулируют XML, я сталкиваюсь с проблемой, что при изменении некоторое содержимое одного из рабочих листов Excel по-прежнему будет использовать последние сгенерированные значения в ячейках, содержащих формулы. Поэтому, когда пользователь открывает сгенерированную электронную таблицу, он видит измененные данные, но все вычисляемые поля устарели. Теперь единственное, что я смог найти (в эти дни) в Интернете, было это:
http://openxmldeveloper.org/discussions/formats/f/14/p/1561/4164.aspx
Это действительно нежелательное решение, особенно если оно применимо к любым вычисляемым ячейкам и объектам (диаграммам и т. д.), поскольку это означает частичную повторную реализацию некоторого процессора SpreadsheetML, когда вы точно не знаете структуру всех рабочих листов.
Я бы надеялся, что в Excel обязательно будет опция или конфигурация в одной из частей SpreadsheetML для принудительного пересчета или пометки ячеек как грязных, но я пока не смог ее найти.
Есть предположение, что скрипты помогут, но отсутствие у меня знаний в этой области пока не привело к каким-либо успешным результатам, так как я не уверен, как включать скрипты в рабочий лист SpreadsheetML. Хотя я нашел довольно много примеров того, как запускать пересчет и как добавлять прослушиватели открытых событий.