如果工作簿包含数据透视表,则添加数据后无法保存 Excel 工作表

Posted

技术标签:

【中文标题】如果工作簿包含数据透视表,则添加数据后无法保存 Excel 工作表【英文标题】:Can't save Excel sheet after adding data if the workbook contains a Pivot table 【发布时间】:2017-10-18 11:01:52 【问题描述】:

我们正在尝试构建用户可以下载的默认 Excel 仪表板。下载 Excel 工作表时,我们希望在文件中的工作表中填充其数据。

我们正在使用 EPPlus 来处理 Excel 工作表。

简而言之,sheet的结构如下:

    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 的使用或命名范围的技巧。但是,这些看起来都不是问题 - 如果我们从工作表中删除所有数据透视表,那么我们就可以很好地保存工作簿。令我惊讶的是,我们能够很好地使用数据透视图,只是导致问题的表。

关于如何避免 EPPlus 出现此问题的任何建议?目前,我们在不使用数据透视表的情况下继续进行,我们希望它们在某个时候返回:)

【问题讨论】:

基于github.com/pruiz/EPPlus/blob/master/EPPlus/Table/PivotTable/…(和错误消息)您是否尝试过将缓存源作为工作表? 老实说,我完全不知道这意味着什么,也不知道该怎么做 :) @mjwills 我用谷歌搜索了一下,发现了一些禁用数据透视表缓存的技巧。我在任何地方都找不到有关更改缓存类型的任何信息。诀窍应该是取消选中“使用文件保存源数据”,但在我们的案例中,当从数据模型加载数据透视表时,该选项似乎是灰色的。 进一步阅读,当表的数据源是 OLAP 多维数据集时,该特定选项似乎被禁用。查看工作表数据模型的属性,它确实将其列为多维数据集。 有机会在某处发布示例文件吗? 【参考方案1】:

错误 - “The cachesource is not a worksheet”可能是由于 Excel 将范围内的源数据识别为工作表中的范围。

您可以使用ws.ListObjects.Add 将范围内的转储数据作为表格更改为表格B。每当刷新数据透视表时,它应该会自动获取表中的所有数据。

如果有帮助,还请检查相关问题中的另一种替代方法 - 将表格而不是范围定义为 PivotTable 'cacheSource'

【讨论】:

感谢您的反馈@IITC 我可以请您详细说明一下“您可以将范围内的转储数据更改为表 B [...]”我不确定我是否完全跟着你。关于更改缓存源,我认为我的设置不可能。正如我在上面的一个 cmets 中所提到的,我正在使用 Power Query 及其 OLAP 多维数据集/数据模型来连接所有数据透视图和表格。这似乎大大限制了我的选择。【参考方案2】:

在操作 Pivot 数据时有很多 issues related with cache。有一次我查看了this other bounty here。

In 必须与 EPPlus 相同。您必须手动处理 Pivot 数据缓存,如完成 here。

这家伙给了complete solution for handling filters with EPPlus。

希望对你有帮助。

【讨论】:

感谢您的反馈 J. Chomel,让我看看您提供的链接并进行一些调查。

以上是关于如果工作簿包含数据透视表,则添加数据后无法保存 Excel 工作表的主要内容,如果未能解决你的问题,请参考以下文章

使用宏刷新我的 excel 工作簿中的所有数据透视表

删除工作簿中每个数据透视表的筛选器

Access VBA:将表导出到 Excel 2010 数据透视表

text 如何刷新工作簿中的所有数据透视表?

如何刷新数据透视图

如何防止数据透视图成为工作表副本上的常规图表?