不幸的是,這似乎是EPPlus的一個主要限制 - 您可以在其codeplex頁面上找到其他人張貼的內容。輸出大型數據集時遇到類似的問題 - 單個表格的寬度超過115列,高度爲60K +行。通常大約30到35k行是內存耗盡的時候。發生的是每個被創建的單元格都是它自己的對象,這對於小數據集來說很好,但在我的情況下它會是115x60K =〜700萬。由於每個單元格都是包含內容的對象(主要是字符串),因此其內存佔用加快。
在未來的某個時候,我的計劃是使用Linq2Xml手動創建XML文件。一個xlsx只是一個用XML文件重新命名的zip文件,構成了工作簿和工作表的內容。因此,您可以使用EPP創建一個空的xlsx,將其保存,以zip形式打開它,提取sheet1.xml並通過字符串操作添加數據內容。您還必須處理Excel使用的sharedstring.xml文件以幫助保持文件大小。可能還有其他需要更新的xml文件以及鍵或名稱。
如果您將任何xlxs重命名爲.zip擴展名,您可以看到它。
例sheet1.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">
<dimension ref="A1:C2"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection activeCell="C5" sqref="C5"/>
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>
<sheetData>
<row r="1" spans="1:3" x14ac:dyDescent="0.25">
<c r="A1" t="s">
<v>0</v>
</c><c r="B1" t="s">
<v>1</v>
</c><c r="C1" t="s">
<v>0</v>
</c>
</row>
<row r="2" spans="1:3" x14ac:dyDescent="0.25">
<c r="A2" t="s">
<v>1</v>
</c><c r="B2" t="s">
<v>0</v>
</c><c r="C2" t="s">
<v>1</v>
</c>
</row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>
例sharedstrings.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="6" uniqueCount="2">
<si>
<t>AA</t>
</si>
<si>
<t>BB</t>
</si>
</sst>
你可以看到我是如何在我的其他崗位做XML操作:
Create Pivot Table Filters With EPPLUS
對不起,我不能給你一個更好的答案,但希望這可以幫助。
,它被固定在測試4的任何機制的文檔?這對我來說沒有什麼區別 - 這是幾個月前的事。希望它能夠修復,但它看起來像是需要對核心引擎進行重大改造。我總是使用IDisposable(通過使用),它對我來說沒有任何區別。問題是包/工作簿將一直保留在內存中,直到完全關閉。我甚至嘗試通過一系列open-save-close-reopen-add逐步導出數據,並沒有什麼區別。它是一個全部或沒有任何東西 - 當你打開文件它將被加載。再次,願意被證明是錯誤的。 – Ernie 2014-11-07 15:24:48
EPPlus 4.1.0不能解決它。如果您只有一個工作表可以寫入,則displosing無效。 – Heiner 2017-02-23 09:22:44