我正在使用EPPlus在C#中编辑现有的电子表格。我正在改变第二个工作表上的原始数据,该工作表被用作第一个工作表上的数据透视表的数据源。我的编辑工作完全正常,我遇到的问题是,当我加载电子表格输出时,我必须通过单击Excel工具栏上的Refresh Data
按钮手动更新数据透视表。
无论如何使用C#EPPlus进行此操作?
我试过了:
package.Workbook.FullCalcOnLoad = true;
和
package.Workbook.Calculate();
没有成功。
更新
我找不到在EPPlus中执行此操作的机制,所以仍然想知道是否有答案。但是,因为我正在编辑预先存在的Excel文件,所以我能够在Excel中编辑现有数据透视表的属性,并将设置更改为在首次加载时自动更新。
答案 0 :(得分:7)
我找不到使用EPPlus实现此目的的方法。
但是,您可以在修改文件之前手动启用数据透视表上的“在打开文件时刷新数据”属性,以便在使用Excel打开文件时,将根据修改后的数据计算数据透视表的内容数据。您可以在数据透视表选项中的数据选项卡下找到此属性。
答案 1 :(得分:0)
数据透视表在Excel文件中有自己的计算上下文。您使用FullCalcOnLoad
属性和Calculate()
方法
我打赌this code from here会帮助你。
foreach (Worksheet sheet in package.Workbook.Sheets)
{
foreach (PivotTable pivotTable in sheet.PivotTables())
{
pivotTable.PivotCache().Refresh(); //could be some other method, but i hope you find right one
}
}
答案 2 :(得分:0)
将此添加到ExcelPivotCacheDefinition.cs
public bool RefreshOnLoad
{
get
{
return GetXmlNodeString("@refreshOnLoad") == "1";
}
set
{
SetXmlNodeString("@refreshOnLoad", value?"1":"0");
}
}
答案 3 :(得分:0)