我们正在尝试构建我们的用户可以下载的默认Excel仪表板。下载Excel工作表时,我们希望用文件填充文件中的工作表。
我们正在使用EPPlus来操作Excel工作表。
简而言之,表格的结构如下:
Sheet A
包含报表元素(数据透视表,数据透视图和切片器)Sheet B
,其中包含整个数据集=OFFSET(Data!$A$1;0;0;COUNTA(Data!$A:$A);COUNTA(Data!$1:$1))
的命名范围,它只是适应我们插入到该工作表中的数据集的大小Sheet A
中的所有报告元素都配置为从数据模型总的来说,只要我们手动填充Sheet B
我们的数据,这就行得很好。当我们尝试使用EPPlus填充数据时,我们在尝试保存文件时收到错误:
The cachesource is not a worksheet
通过反复试验,我们剥去了它的部件,以找出问题的原因。我们怀疑它可能是切片器,Power Query / Data Model的使用或命名范围的技巧。但是,这些都不是问题 - 如果我们从工作表中删除所有数据透视表,那么我们就可以保存工作簿了。令我感到惊讶的是,我们能够很好地使用Pivot Charts,它只是引起问题的表格。
有关如何使用EPPlus避免此问题的任何建议?现在,我们继续不使用数据透视表,我们希望在某些时候让它们返回:)
答案 0 :(得分:1)
错误 - " The cachesource is not a worksheet
"可能是由于Excel中的源数据被识别为工作表中的范围。
您可以使用ws.ListObjects.Add
将范围内的转储数据更改为工作表B作为表格。每当刷新数据透视表时,它都应自动获取表中的所有数据。
还请检查相关问题中的其他替代方法 - 如果有帮助,请将表格定义为PivotTable 'cacheSource'
而不是范围。
答案 1 :(得分:0)
操作Pivot数据时有很多issues related with cache。有一次我看了this other bounty here。
必须与EPPlus相同。您必须手动处理Pivot数据缓存,例如done here。
这家伙给了complete solution for handling filters with EPPlus。
希望它有所帮助。