Хорошо, есть неплохой обходной путь для этого. Используя 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 Productivity Tool, чтобы искать его.
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;
}
Другое решение заключается в преобразовании таблицы в macroenabled, встроить туда скрипт VBA, который будет обновить все сводные таблицы. Это может произойти при нажатии кнопки или при открытии электронной таблицы. Здесь вы можете найти VBA код для обновления сводных таблиц: http://www.ozgrid.com/VBA/pivot-table-refresh.htm
Что касается сводных таблиц, я просто проверил опцию «Обновить данные при открытии файла» каждой сводной таблицы. –