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

标签 c# excel epplus powerquery

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

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

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

  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 中的所有报告元素都配置为从数据模型加载数据

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

The cachesource is not a worksheet

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

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

最佳答案

错误 - “缓存源不是工作表”可能是由于 Excel 将范围内的源数据识别为工作表中的范围。

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

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

关于c# - 如果工作簿包含数据透视表,则在添加数据后无法保存 Excel 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46808669/

相关文章:

c# - 是否可以扩展 ServiceStack.ServiceInterface.Auth?

excel - 通过引用文件路径在用户表单中设置图像控件的值

sql - 将 int YYYYMMDD 转换为日期 AS400

r - R 能否执行与嵌套在 VLOOKUP 中的 HLOOKUP 等效的操作?

c# - EPPlus 数据透视表/图表

c# - 在 P/Invoke 中使用 ref struct 或 class

c# - 为什么我不经常看到更严格的范围界定?

excel - 使用 EPPlus 从 Excel 文件生成 HTML 表格?

c# - 如何加入两个词典?

c# - EPPlus 折线图无法将轴与刻度线对齐