2017-10-18 992 views
9

我們正在嘗試構建用戶可以下載的默認Excel儀表板。下載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的報告要素配置爲從數據模型

整體負載數據,這個偉大的工程,只要我們手工餡Sheet B我們的數據。當我們試圖用EPPlus在填寫資料時,我們在嘗試保存文件時出現錯誤:

The cachesource is not a worksheet 

通過試錯,我們已經剝離了片的這部分問題的原因隔離。我們懷疑它可能是切片機,Power Query/Data Model的使用或命名範圍的技巧。但是,這些看起來都不是問題 - 如果我們從工作表中刪除所有數據透視表,那麼我們就可以保存工作簿了。令我感到驚訝的是,我們能夠使用Pivot Charts就好了,它只是導致問題的表格。

有關如何避免EPPlus的這個問題的任何建議?現在,我們繼續不使用數據透視表,我們希望讓他們在某些時候返回:)

+1

基於https://github.com/pruiz/EPPlus/blob/master/EPPlus/Table/PivotTable/ExcelPivotCacheDefinition.cs(以及錯誤消息),您是否嘗試將cachesource作爲工作表? – mjwills

+0

說實話,我沒有絲毫的想法,這是什麼意思或怎麼做:) –

+0

@mjwills我搜索了一下,發現了一些技巧來禁用數據透視表緩存。我找不到任何有關在任何地方更改緩存類型的信息。 訣竅應該是勾選「使用文件保存源數據」,但在從數據模型加載數據透視表的情況下,該選項似乎灰顯。 –

回答

1

錯誤 - 「The cachesource is not a worksheet」可能是由於通過Excel將範圍內的源數據識別爲範圍工作表。

您可以使用ws.ListObjects.Add將範圍內的轉儲數據更改爲表格B。每當數據透視表刷新時,它應自動獲取表中的所有數據。

另請查看相關問題的其他備選方案 - 將表格而不是範圍定義爲PivotTable 'cacheSource',如果有幫助的話。

+0

感謝您的反饋@IITC 我可以詳細介紹一下「您可以將範圍內的轉儲數據更改爲Sheet B [...]」我不確定我完全關注您。 關於更改緩存源,我認爲這不可能與我的設置。正如我在上面的評論中提到的那樣,我使用Power Query和它的OLAP Cube/Data Model來連接所有的數據透視表和表格。這似乎大大限制了我的選擇。 –

相關問題