如果工作簿包含数据透视表 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的结构如下:
Sheet A
带有报告元素(数据透视表、数据透视图和切片器)
Sheet B
包含整个数据集
- 定义为
=OFFSET(Data!$A;0;0;COUNTA(Data!$A:$A);COUNTA(Data!:))
的命名范围,它只是适应我们插入到 sheet 中的数据集的大小
- 无论命名范围包含什么,我都加载到 Power Query 中并添加到工作簿数据模型中
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。
希望对您有所帮助。
我们正在尝试构建一个默认的 Excel 仪表板,我们的用户可以下载该仪表板。下载 Excel sheet 时,我们想用它们的数据填充文件中的 sheet。
我们正在使用 EPPlus 来处理 Excel sheet。
简而言之,sheet的结构如下:
Sheet A
带有报告元素(数据透视表、数据透视图和切片器)Sheet B
包含整个数据集- 定义为
=OFFSET(Data!$A;0;0;COUNTA(Data!$A:$A);COUNTA(Data!:))
的命名范围,它只是适应我们插入到 sheet 中的数据集的大小
- 无论命名范围包含什么,我都加载到 Power Query 中并添加到工作簿数据模型中
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。
希望对您有所帮助。