Sfortunatamente, questo sembra essere un limite importante di EPPlus - puoi trovare altri post su di esso nella loro pagina di codeplex. Ho riscontrato un problema simile durante l'esportazione di serie di dati di grandi dimensioni: tabelle singole con 115+ colonne di larghezza e 60.000 di righe alte. In genere, circa 30 a 35k righe si trovano quando ha esaurito la memoria. Quello che sta succedendo è che ogni cella che viene creata è un oggetto che va bene per un piccolo set di dati, ma nel mio caso sarebbe 115x60K = ~ 7 milioni. Poiché ogni cella è un oggetto con contenuto (principalmente stringhe), l'impronta della memoria si somma rapidamente.
A un certo punto in futuro il mio piano era di creare manualmente i file XML utilizzando Linq2Xml. Un xlsx è solo un file zip rinominato con file XML che costituiscono il contenuto della cartella di lavoro e dei fogli di lavoro. Quindi, puoi creare un xlsx vuoto usando EPP, salvarlo, aprirlo come zip, estrarre sheet1.xml e aggiungere il contenuto dei dati tramite la manipolazione delle stringhe. Dovresti anche lavorare sul file sharedstring.xml che Excel usa per mantenere la dimensione del file verso il basso. Probabilmente ci sono altri file xml che dovranno essere aggiornati anche con chiavi o nome.
Se si rinomina qualsiasi xlx in un'estensione .zip, è possibile visualizzarlo.
Esempio 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>
Esempio 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>
si può vedere come ho fatto manipolazione xml nel mio altro post:
Create Pivot Table Filters With EPPLUS
Mi spiace di non averti dato una risposta migliore ma spero che questo aiuti.
Qualsiasi documention che è fissato in beta 4? Non ha fatto alcuna differenza per me - garantito questo è stato qualche mese fa. Mi piacerebbe averlo risolto, ma sembrava che richiedesse una revisione completa del motore principale. Uso sempre IDisposable (tramite Using's) e non fa nessuna differenza per me. Il problema è che il pacchetto/cartella di lavoro rimarrà in memoria fino alla chiusura completa. Ho persino provato a esportare in modo incrementale i dati con una serie di open-save-close-reopen-add e non ha fatto alcuna differenza. È una cosa tutto o niente - nel momento in cui apri il file, TUTTO viene caricato. Ancora una volta, mi piacerebbe essere smentito. – Ernie
EPPlus 4.1.0 non lo risolve. E il displosing non aiuta se hai solo 1 foglio di lavoro su cui scrivere. – Heiner