如果工作簿包含数据透视表,添加数据后无法保存Excel工作表
我们正在尝试构建用户可以下载的默认Excel仪表板。下载Excel工作表时,我们希望使用他们的数据填充文件中的工作表。如果工作簿包含数据透视表,添加数据后无法保存Excel工作表
我们使用EPPlus处理Excel工作表。
总之,在片材的结构如下:
-
Sheet A
与报告要素(枢轴表,枢轴图表和切片器) -
Sheet B
包含整个数据集 - 命名范围定义为
=OFFSET(Data!$A$1;0;0;COUNTA(Data!$A:$A);COUNTA(Data!$1:$1))
,它简单地适应我们插入到该表中的数据集的大小 - 无论命名的范围包含我加载到Power Query并添加到工作簿数据模型 个
- 所有的
Sheet A
的报告要素配置为从数据模型
整体负载数据,这个伟大的工程,只要我们手工馅Sheet B
我们的数据。当我们试图用EPPlus在填写资料时,我们在尝试保存文件时出现错误:
The cachesource is not a worksheet
通过试错,我们已经剥离了片的这部分问题的原因隔离。我们怀疑它可能是切片机,Power Query/Data Model的使用或命名范围的技巧。但是,这些看起来都不是问题 - 如果我们从工作表中删除所有数据透视表,那么我们就可以保存工作簿了。令我感到惊讶的是,我们能够使用Pivot Charts就好了,它只是导致问题的表格。
有关如何避免EPPlus的这个问题的任何建议?现在,我们继续不使用数据透视表,我们希望让他们在某些时候返回:)
错误 - “The cachesource is not a worksheet
”可能是由于通过Excel将范围内的源数据识别为范围工作表。
您可以使用ws.ListObjects.Add
将范围内的转储数据更改为表格B。每当数据透视表刷新时,它应自动获取表中的所有数据。
另请查看相关问题的其他备选方案 - 将表格而不是范围定义为PivotTable 'cacheSource'
,如果有帮助的话。
感谢您的反馈@IITC 我可以详细介绍一下“您可以将范围内的转储数据更改为Sheet B [...]”我不确定我完全关注您。 关于更改缓存源,我认为这不可能与我的设置。正如我在上面的评论中提到的那样,我使用Power Query和它的OLAP Cube/Data Model来连接所有的数据透视表和表格。这似乎大大限制了我的选择。 –
处理数据透视数据时有很多issues related with cache。一旦我看了它的this other bounty here。
必须与EPPlus相同。您必须手动处理Pivot数据缓存,就像完成here一样。
这里的家伙给出complete solution for handling filters with EPPlus。
希望它有帮助。
谢谢您的反馈J. Chomel,让我看看您提供的链接并进行调查。 –
基于https://github.com/pruiz/EPPlus/blob/master/EPPlus/Table/PivotTable/ExcelPivotCacheDefinition.cs(以及错误消息),您是否尝试将cachesource作为工作表? – mjwills
说实话,我没有丝毫的想法,这是什么意思或怎么做:) –
@mjwills我搜索了一下,发现了一些技巧来禁用数据透视表缓存。我找不到任何有关在任何地方更改缓存类型的信息。 诀窍应该是勾选“使用文件保存源数据”,但在从数据模型加载数据透视表的情况下,该选项似乎灰显。 –