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

Can't save Excel sheet after adding data if the workbook contains a Pivot table

我们正在尝试构建一个默认的 Excel 仪表板,我们的用户可以下载该仪表板。下载 Excel sheet 时,我们想用它们的数据填充文件中的 sheet。

我们正在使用 EPPlus 来处理 Excel sheet。

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

  1. Sheet A 带有报告元素(数据透视表、数据透视图和切片器)
  2. Sheet B 包含整个数据集
  3. 定义为 =OFFSET(Data!$A;0;0;COUNTA(Data!$A:$A);COUNTA(Data!:)) 的命名范围,它只是适应我们插入到 sheet
  4. 中的数据集的大小
  5. 无论命名范围包含什么,我都加载到 Power Query 中并添加到工作簿数据模型中
  6. Sheet A 中的所有报告元素都配置为从数据模型加载数据

总的来说,只要我们用我们的数据手动填充 Sheet B,这就很好用。当我们尝试使用 EPPlus 填充数据时,我们在尝试保存文件时遇到错误:

The cachesource is not a worksheet

通过反复试验,我们剥离了 sheet 的部分以找出问题的原因。我们怀疑它可能是切片器、Power Query/Data 模型的使用或命名范围的技巧。但是,其中的 none 看起来是问题所在 - 如果我们从 sheet 中删除所有数据透视表,那么我们就可以很好地保存工作簿。令我惊讶的是,我们能够很好地使用数据透视图,只是导致问题的表格。

关于如何使用 EPPlus 避免这个问题有什么建议吗?现在,我们继续不使用数据透视表,我们希望在某个时候使用它们 return :)

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

您可以使用 ws.ListObjects.Add 将范围内的转储数据更改为 Sheet B 作为 table。每当 pivot table 刷新时,它应该自动获取 table.

内的所有数据

如果有帮助,请同时检查相关问题中可用的另一个替代方案 - 定义 table 而不是 PivotTable 'cacheSource' 的范围。

有很多issues related with cache when manipulating Pivot data. Once I had a look at it for this other bounty here

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

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

希望对您有所帮助。