如果工作簿包含数据透视表,则在添加数据后无法保存Excel工作表
我们正在尝试构build一个供用户下载的默认Excel仪表板。 当下载Excel工作表时,我们希望用他们的数据填充文件中的工作表。
我们使用EPPlus来处理Excel工作表。
总之,表格的结构如下:
- 报表元素(透视表,数据透视图和切片器)
-
Sheet B
包含整个数据集 - 定义为
=OFFSET(Data!$A$1;0;0;COUNTA(Data!$A:$A);COUNTA(Data!$1:$1))
的命名范围只适用于我们插入的数据集的大小那张纸 - 无论命名范围包含我加载到电源查询并添加到工作簿数据模型
- 工作
Sheet A
所有报告元素都被configuration为从数据模型中加载数据
总的来说,只要我们手工填写Sheet B
与我们的数据,这个工作很好。 当我们尝试使用EPPlus填写数据时,在尝试保存文件时出现错误:
The cachesource is not a worksheet
通过试验和错误,我们已经剥去了它的部分,以隔离问题的原因。 我们怀疑它可能是切片机,使用Power Query / Data Model或者命名范围的技巧。 但是,这些看起来都不是问题 – 如果我们从工作表中删除所有数据透视表,那么我们就可以保存工作簿了。 令我感到意外的是,我们可以使用Pivot Charts,这只是造成问题的表格。
有关如何避免与EPPlus这个问题的任何build议? 现在,我们继续不使用数据透视表,我们希望他们在某个时候返回:)
错误 – “ The cachesource is not a worksheet
”可能是由于通过Excel将范围内的源数据识别为工作表中的范围。
您可以使用ws.ListObjects.Add
将该范围内的转储数据更改为表B的表格。 每当数据透视表刷新时,它应该自动获取表中的所有数据。
还请检查另一个可用的相关问题的替代方法 – 定义一个表,而不是一个范围作为PivotTable 'cacheSource'
,如果有帮助。
操作Pivot数据时,存在许多与caching相关的问题 。 有一次,我在这里看看这个其他的赏金 。
必须与EPPlus相同。 您必须手动处理Pivot数据caching,就像这里所做的那样。
在这里,这个家伙提供完整的解决scheme,用EPPlus处理filter 。
希望能帮助到你。