不幸的是,这似乎是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