Skip to content

XlsxWorksheet constructor is parsing the whole sheet on construction #618

@OwnageIsMagic

Description

@OwnageIsMagic

while ((record = sheetStream.Read()) != null)
{
switch (record)
{
case SheetDataBeginRecord _:
inSheetData = true;
break;
case SheetDataEndRecord _:
inSheetData = false;
break;
case RowHeaderRecord row when inSheetData:
rowIndexMaximum = Math.Max(rowIndexMaximum, row.RowIndex);
break;
case CellRecord cell when inSheetData:
columnIndexMaximum = Math.Max(columnIndexMaximum, cell.ColumnIndex);
break;
case ColumnRecord column:
columnWidths.Add(column.Column);
break;
case SheetFormatPrRecord sheetFormatProperties:
if (sheetFormatProperties.DefaultRowHeight != null)
DefaultRowHeight = sheetFormatProperties.DefaultRowHeight.Value;
break;
case SheetPrRecord sheetProperties:
CodeName = sheetProperties.CodeName;
break;
case MergeCellRecord mergeCell:
cellRanges.Add(mergeCell.Range);
break;
case HeaderFooterRecord headerFooter:
HeaderFooter = headerFooter.HeaderFooter;
break;
}
}

So basically calling reader.NextResult() is contributing 50% time of my workload and allocating tons of Cell, Cell[] and boxed double for worksheet I even don't want to read.

Profiler result

image


Maybe make those properties lazy calculated?

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions