Ну, для этого есть неплохой обходной путь.Используя OpenXML, вы можете включить опцию «обновить данные при открытии файла» в сводной таблице (щелкните правой кнопкой мыши сводную таблицу-> Параметры сводной таблицы-> вкладка Данные).Это приводит к автоматическому обновлению сводной таблицы, когда пользователь впервые открывает электронную таблицу.Код:
using (var document = SpreadsheetDocument.Open(newFilePath, true))
{
var uriPartDictionary = BuildUriPartDictionary(document);
PivotTableCacheDefinitionPart pivotTableCacheDefinitionPart1 = (PivotTableCacheDefinitionPart)uriPartDictionary["/xl/pivotCache/pivotCacheDefinition1.xml"];
PivotCacheDefinition pivotCacheDefinition1 = pivotTableCacheDefinitionPart1.PivotCacheDefinition;
pivotCacheDefinition1.RefreshOnLoad = true;
}
вам нужно определить «путь» к вашему pivotCacheDefinition - используйте инструмент повышения производительности OpenXML SDK 2.0.
BuildUriPartDictionary - это стандартметод, сгенерированный OpenXML SDK 2.0 Productivity Tool
protected Dictionary<String, OpenXmlPart> BuildUriPartDictionary(SpreadsheetDocument document)
{
var uriPartDictionary = new Dictionary<String, OpenXmlPart>();
var queue = new Queue<OpenXmlPartContainer>();
queue.Enqueue(document);
while (queue.Count > 0)
{
foreach (var part in queue.Dequeue().Parts.Where(part => !uriPartDictionary.Keys.Contains(part.OpenXmlPart.Uri.ToString())))
{
uriPartDictionary.Add(part.OpenXmlPart.Uri.ToString(), part.OpenXmlPart);
queue.Enqueue(part.OpenXmlPart);
}
}
return uriPartDictionary;
}
Другое решение - преобразовать вашу электронную таблицу в макрореактивную, добавив туда скрипт VBA, который обновит все сводные таблицы.Это может произойти по нажатию кнопки или снова, когда пользователь открывает электронную таблицу.Здесь вы можете найти код VBA для обновления сводных таблиц: http://www.ozgrid.com/VBA/pivot-table-refresh.htm