public byte[] Export(Tin[] records, ReportOptions options) { using var package = options.Template == null ? new ExcelPackage() : new ExcelPackage(new MemoryStream(options.Template)); var columns = GetColumns(); var chunkCount = records.Length / options.PageSize + 1; for (var i = 0; i < chunkCount; i++) { var chunk = records .Skip(i * options.PageSize) .Take(options.PageSize) .ToArray(); var ws = GetWorkSheet( package.Workbook, GetWorkSheetName(i, options.PageSize, chunk.Length), columns, options); for (var j = 0; j < records.Length; j++) { var record = records[j]; for (var k = 0; k < columns.Length; k++) { var column = columns[k]; ws.Cells[j + 1 + options.StartFrom, k + 1].Value = record.GetValue(column); } } } return(package.GetAsByteArray()); }