2015-09-24 63 views
5

我使用EPPlus v3.1.3創建一系列Excel工作簿。當我打開新創建的文件時,如果我關閉它而沒有觸及任何內容,它會詢問我是否要保存更改。我注意到的唯一一件事情是,如果我說「是」,app.xml文件會稍微改變 - 工作簿中沒有可見的區別,其餘的XML文件是相同的。我曾嘗試這兩種方法:提示保存使用EPPlus創建的文件更改

ExcelPackage p = new ExcelPackage(new FileInfo(filename)); 
p.Save(); 

以及

ExcelPackage p = new ExcelPackage(); 
p.SaveAs(new FileInfo(filename)); 

,並都具有相同的問題。有沒有辦法讓它的最終形式的app.xml文件輸出?

這是一個問題的原因是因爲我們使用SAS程序進行QC,並且當SAS程序打開文件時,它們直接從EPPlus程序輸出,它不會從單元格中獲取值公式在他們。如果它打開並選擇「是」選擇「是否要保存更改」,則它工作正常。但是,由於我們正在創造數百個這樣的內容,這是不實際的。

另外,我正在使用模板。模板顯示正常。

特別奇怪的是,我們一直在使用這個系統一年多,這是我們第一次遇到這個問題。

有沒有辦法解決這個問題?在C#還是SAS方面?

+0

您是否意外關閉了Excel中的公式計算?你能否確認這是否是來自不同機器的問題? –

+0

公式計算已啓用且受保護的視圖已禁用。我試過兩種不同的機器。 – yammerade

回答

2

你所看到的其實並不罕見。 Epplus實際上並不生成完整的XLSX文件,而是創建原始XML內容(所有Office 2007文檔格式都是基於xml的),並將其放入重命名爲XLSX的zip文件中。由於它沒有通過Excel引擎運行,因此它沒有完全格式化以滿足喜好。

如果它是一個簡單的數據表,那麼Excel可能不需要做太多的計算 - 只是基本的格式。所以在這種情況下,它不會提示你保存。但即使如此,如果你這樣做,你會看到它稍微改變了XLSX文件。如果你真的想看看它在幕後做了什麼,請將文件重命名爲.zip,然後查看之前和之後的xml文件。

您正在運行的問題是因爲它不僅僅是一個簡單的表格導出Excel必須在第一次打開時運行計算。這可能是許多事情 - 公式,自動過濾器,自動列/行高度限定,大綱等。基本上,任何會使Excel在完成Excel後看起來有點「不同」的東西。

不幸的是,這並不容易。以某種方式通過excel的DOM運行它會是最簡單的,這當然會損害使用EPPlus的目的。你可以做的另一件事是看到xml文件之前和之後的區別(並且有一堆你必須看看),並且模仿excel在「after」文件版本中改變/添加的區別手動編輯XML內容。這不是一個非常漂亮的選擇,具體取決於改變的範圍。你可以看到我是如何在這裏其他情況下做到了:

Create Pivot Table Filters With EPPLUS

Adding a specific autofilter on a column

Set Gridline Color Using EPPlus?

+0

謝謝。我想這將是答案,但我希望有一個更直接的解決方法。我想我只是將所有的計算都從Excel中移出來,所以我們不會彈出我們的QC系統。 – yammerade

+0

@LisaMcCusker當然。我忘記提及的另一個選擇是VBA。您可以將違規邏輯移動到一個宏,該宏在Excel首次打開時激活,然後在沒有VBA的情況下重新進行自我調整。也不是最乾淨的方式,但想到我會提到它。看到這裏:http://stackoverflow.com/questions/26734787/epplus-pivot-table-copy-values-to-new-sheet/26736549#26736549。 – Ernie

1

我使用EPPlus(4.1版本就遇到了這個同樣的問題。0,fyi)並發現在關閉前添加下面的代碼修復了問題:

p.Workbook.Calculate(); 
p.Workbook.FullCalcOnLoad = false; 
相關問題