bhu*_*nay 8 c# excel excel-2007 epplus
系统内存异常.我看到内存Stream只在保存时刷新.我们有1.5 - 2GB的数据集.
我使用的是EPPlus版本3.1.3.0
我们在代码中执行以下操作.
我们循环
--> Create a Package
--> each table in the datareader
--> Add WorkSheet to the Package
--> Dispose Each table.
--> Save the Package.
Run Code Online (Sandbox Code Playgroud)
每个数据表的大小为300Mg,最多15个表格.
这导致了一个问题,我已经详细记录了这个@ https://epplus.codeplex.com/workitem/15085
我仍然希望能够使用EPPlus非常好的API.但是,一旦我们将工作表添加到包中,就有更好的方法来释放工作表.
谢谢你的帮忙.
不幸的是,这似乎是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>
Run Code Online (Sandbox Code Playgroud)
示例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>
Run Code Online (Sandbox Code Playgroud)
您可以在我的其他帖子中看到我如何进行xml操作:
对不起,我无法给你一个更好的答案,但希望这有帮助.
小智 9
我有这个问题,但我通过切换"选项固定它Platform target",来自x86于x64或" Any CPU".(右键单击项目,然后选择"属性",然后选择"Build"选项卡,再选择"Platform target"选择"x64")
问题是,对于平台,x86您只能使用大约1.8 GB的RAM.对于平台x64,您没有此限制.