如果工作簿包含数据透视表

时间:2017-10-18 11:01:52

标签: c# excel epplus powerquery

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

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

简而言之,表格的结构如下:

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

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

    The cachesource is not a worksheet
    

    通过反复试验,我们剥去了它的部件,以找出问题的原因。我们怀疑它可能是切片器,Power Query / Data Model的使用或命名范围的技巧。但是,这些都不是问题 - 如果我们从工作表中删除所有数据透视表,那么我们就可以保存工作簿了。令我感到惊讶的是,我们能够很好地使用Pivot Charts,它只是引起问题的表格。

    有关如何使用EPPlus避免此问题的任何建议?现在,我们继续不使用数据透视表,我们希望在某些时候让它们返回:)

2 个答案:

答案 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

希望它有所帮助。