Leider scheint dies eine große Einschränkung von EPPlus zu sein - Sie können andere darüber auf ihrer Codeplexseite finden. Ich lief in ein ähnliches Problem, wenn großen Datenmenge Export - Einzeltische mit 115+ Spalten breit und 60K + Reihen hoch. In der Regel sind es 30 bis 35.000 Zeilen, wenn der Arbeitsspeicher knapp wird. Was passiert, ist, dass jede Zelle, die erzeugt wird, ein eigenes Objekt ist, was für kleine Datensätze gut ist, aber in meinem Fall wäre es 115x60K = ~ 7 Millionen. Da jede Zelle ein Objekt mit Inhalt (meist Strings) ist, summiert sich ihr Speicherbedarf schnell.
Irgendwann in der Zukunft war mein Plan, die XML-Dateien manuell mit Linq2Xml zu erstellen. Ein xlsx ist nur eine Zip-Datei, die mit XML-Dateien umbenannt wurde, die den Inhalt der Arbeitsmappe und der Arbeitsblätter bilden. Sie könnten also ein leeres xlsx mit EPP erstellen, es speichern, es als Zip öffnen, sheet1.xml herausziehen und den Dateninhalt per String-Manipulation hinzufügen. Sie würden auch auf der sharedstring.xml Datei arbeiten, die Excel die Dateigröße nach unten, um zu helfen verwendet. Es gibt wahrscheinlich andere XML-Dateien, die auch mit Schlüsseln oder Namen aktualisiert werden müssen.
Wenn Sie xlxs zu einer ZIP-Erweiterung umbenennen können Sie das sehen.
Beispiel 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>
Beispiel 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>
Sie können sehen, wie ich xml Manipulation habe in meinem anderen Beitrag:
Create Pivot Table Filters With EPPLUS
Leider
Ich könnte nicht geben Ihnen eine bessere Antwort, aber hoffentlich das hilft.
Alle Dokumention, die es in der Beta 4 festgelegt ist? Es machte keinen Unterschied für mich - zugegeben, das war vor ein paar Monaten. Ich würde es gerne reparieren, aber es sah so aus, als ob es eine Generalüberholung der Kernmaschine erfordert. Ich benutze immer IDisposable (über Using's) und es macht keinen Unterschied für mich. Das Problem ist, dass das Paket/die Arbeitsmappen im Speicher verbleiben, bis sie vollständig geschlossen sind. Ich habe sogar versucht, die Daten schrittweise durch eine Reihe von Open-Save-Close-Reopen-Add zu exportieren und es machte keinen Unterschied. Es ist alles oder nichts - sobald Sie die Datei öffnen, wird ALL geladen. Nochmals, würde gerne falsch bewiesen werden. – Ernie
EPPlus 4.1.0 löst es nicht. Und das Auflösen hilft nicht, wenn Sie nur 1 Arbeitsblatt zum Schreiben haben. – Heiner