I generate excel spreadsheet like this:
public void Export<TRow>(string fileName, IEnumerable<TRow> data, ColumnDef<TRow>[] columnDefitions)
{
using (SpreadsheetDocument document = CreateSpreadsheet(fileName))
{
var sheetData = GenerateSheetData(data, columnDefitions);
var columns = GetAutoSizedColumns(sheetData);
var workSheetPart = document.WorkbookPart.WorksheetParts.First();
workSheetPart.Worksheet.AppendChild(columns);
workSheetPart.Worksheet.AppendChild(sheetData);
document.Save();
document.Close();
}
}
SpreadsheetDocument CreateSpreadsheet(string fileName)
{
SpreadsheetDocument document = SpreadsheetDocument.Create(fileName, SpreadsheetDocumentType.Workbook);
document.AddWorkbookPart();
document.WorkbookPart.Workbook = new Workbook();
AddStyles(document.WorkbookPart);
var _worksheetPart = document.WorkbookPart.AddNewPart<WorksheetPart>();
_worksheetPart.Worksheet = new Worksheet();
Sheets sheets = document.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
Sheet sheet = new Sheet()
{
Id = document.WorkbookPart.GetIdOfPart(_worksheetPart),
SheetId = 1,
Name = "Sheet1"
};
sheets.Append(sheet);
return document;
}
I want to generate excel with tens of thousands rows.
Is it possible without having all rows in memory at once?
I mean something like this: I would generate 1000 rows and save and then append another 1000 rows without having to load existing data.