Niestety, wydaje się to być głównym ograniczeniem EPPlus - można znaleźć inne informacje na ten temat na swojej stronie kodowej. Podczas eksportu dużego zestawu danych napotkałem podobny problem - pojedyncze tabele o szerokości 115+ i wysokości 60K + wiersze. Zazwyczaj około 30 do 35 tys. Wierszy występuje, gdy zabrakło im pamięci. To, co się dzieje, to każda stworzona komórka, która jest właściwa dla małego zbioru danych, ale w moim przypadku byłaby to 115x60K = ~ 7 milionów. Ponieważ każda komórka jest obiektem z zawartością (głównie ciągi), jej ślad pamięci szybko się powiększa.
W pewnym momencie w przyszłości mój plan polegał na ręcznym utworzeniu plików XML przy użyciu Linq2Xml. Xlsx to po prostu plik zip, którego nazwa została zmieniona na pliki XML tworzące zawartość skoroszytu i arkuszy kalkulacyjnych. Więc możesz stworzyć puste xlsx używając EPP, zapisz go, otwórz jako zip, wyciągnij sheet1.xml i dodaj zawartość danych poprzez manipulację ciągami. Trzeba również pracować nad plikiem sharedstring.xml, którego używa Excel, aby zmniejszyć rozmiar pliku. Prawdopodobnie istnieją inne pliki xml, które będą wymagały aktualizacji wraz z kluczami lub nazwą.
Jeśli zmienisz nazwę dowolnego xlxs na rozszerzenie .zip, zobaczysz to.
Przykład 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>
Przykład 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>
Można zobaczyć, jak to zrobiłem manipulacji xml w mój drugi wpis:
Create Pivot Table Filters With EPPLUS
Niestety, nie mogłem dać ci lepszej odpowiedzi, ale mam nadzieję, że to pomoże.
Wszelkie dokumentację, że jest ona ustalana w fazie beta 4? Dla mnie to nie miało znaczenia - przyznał, że było to kilka miesięcy temu. Chciałbym to naprawić, ale wyglądało na to, że wymaga on gruntownego remontu głównego silnika. Zawsze używam IDisposable (przez Using's) i nie ma dla mnie znaczenia. Problem polega na tym, że pakiet/skoroszyt pozostaną w pamięci do całkowitego zamknięcia. Próbowałem nawet stopniowo eksportować dane przez serię open-save-close-reopen-add i nie robiło to żadnej różnicy. Jest to wszystko lub nic - od momentu otwarcia pliku ALL zostaje załadowany. Znowu chciałbym, aby udowodniono, że jest źle. – Ernie
EPPlus 4.1.0 go nie rozwiąże. A przesuwanie nie pomaga, jeśli masz do napisania tylko 1 arkusz roboczy. – Heiner