@slickgrid-universal/excel-export 9.11.0 → 9.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,22 +5,14 @@
5
5
  [![npm](https://img.shields.io/npm/dy/@slickgrid-universal/excel-export)](https://www.npmjs.com/package/@slickgrid-universal/excel-export)
6
6
  [![npm bundle size](https://img.shields.io/bundlephobia/minzip/@slickgrid-universal/excel-export?color=success&label=gzip)](https://bundlephobia.com/result?p=@slickgrid-universal/excel-export)
7
7
 
8
- [![Actions Status](https://github.com/ghiscoding/slickgrid-universal/workflows/CI%20Build/badge.svg)](https://github.com/ghiscoding/slickgrid-universal/actions)
9
- [![Cypress.io](https://img.shields.io/badge/tested%20with-Cypress-04C38E.svg)](https://www.cypress.io/)
10
- [![Vitest](https://img.shields.io/badge/tested%20with-vitest-fcc72b.svg?logo=vitest)](https://vitest.dev/)
11
- [![codecov](https://codecov.io/gh/ghiscoding/slickgrid-universal/branch/master/graph/badge.svg)](https://codecov.io/gh/ghiscoding/slickgrid-universal)
12
-
13
8
  ## Excel Export Service
14
- #### @slickgrid-universal/excel-export
9
+ #### `@slickgrid-universal/excel-export`
15
10
 
16
11
  Simple Export to Excel Service, which requires [`excel-builder-vanilla`](https://github.com/ghiscoding/excel-builder-vanilla) external dependency, which allows exporting your grid data as `.xls` or `.xlsx` files.
17
12
 
18
- ### Internal Dependencies
19
- - [@slickgrid-universal/common](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/common)
20
- - [@slickgrid-universal/utils](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/utils)
21
-
22
13
  ### External Dependencies
23
- This package requires [excel-builder-vanilla](https://www.npmjs.com/package/excel-builder-vanilla) which itself also has a single dependency [fflate](https://www.npmjs.com/package/fflate) to compress the data before sending it to the browser.
14
+
15
+ - [excel-builder-vanilla](https://www.npmjs.com/package/excel-builder-vanilla) to build and export to Excel.
24
16
 
25
17
  ### Installation
26
18
  Follow the instruction provided in the main [README](https://github.com/ghiscoding/slickgrid-universal#installation), you can see a demo by looking at the [GitHub Demo](https://ghiscoding.github.io/slickgrid-universal/#/example02) page and click on "Export to Excel" from the Context Menu or the Grid Menu (aka hamburger menu).
@@ -49,13 +49,15 @@ export declare class ExcelExportService implements ExternalResource, BaseExcelEx
49
49
  */
50
50
  init(grid: SlickGrid, containerService: ContainerService): void;
51
51
  /**
52
- * Function to export the Grid result to an Excel CSV format using JavaScript for it to produce the CSV file.
53
- * This is a WYSIWYG export to file output (What You See is What You Get)
52
+ * Export the current grid data to Excel (WYSIWYG).
54
53
  *
55
- * NOTES: The column position needs to match perfectly the JSON Object position because of the way we are pulling the data,
56
- * which means that if any column(s) got moved in the UI, it has to be reflected in the JSON array output as well
54
+ * Notes:
55
+ * - Column order must match the grid.
56
+ * - For large datasets, processing yields periodically to keep the UI responsive.
57
57
  *
58
- * Example: exportToExcel({ format: FileType.csv, delimiter: DelimiterType.comma })
58
+ * Events:
59
+ * - 'onBeforeExportToExcel' before export starts
60
+ * - 'onAfterExportToExcel' after export completes or fails
59
61
  */
60
62
  exportToExcel(options?: ExcelExportOption): Promise<boolean>;
61
63
  /**
@@ -67,7 +69,10 @@ export declare class ExcelExportService implements ExternalResource, BaseExcelEx
67
69
  * @return {string} The column name.
68
70
  */
69
71
  getExcelColumnNameByIndex(colIndex: number): string;
70
- protected getDataOutput(): Array<string[] | ExcelColumnMetadata[]>;
72
+ /**
73
+ * Async version of getDataOutput with yielding for UI responsiveness during large dataset processing
74
+ */
75
+ protected getDataOutputAsync(): Promise<Array<string[] | ExcelColumnMetadata[]>>;
71
76
  /** Get each column style including a style for the width of each column */
72
77
  protected getColumnStyles(columns: Column[]): any[];
73
78
  /**
@@ -92,8 +97,14 @@ export declare class ExcelExportService implements ExternalResource, BaseExcelEx
92
97
  protected getColumnHeaders(columns: Column[]): Array<KeyTitlePair> | null;
93
98
  /**
94
99
  * Get all the grid row data and return that as an output string
100
+ * Async version of pushAllGridRowDataToArray with yielding for UI responsiveness during large dataset processing.
101
+ * Processes rows directly from DataView with periodic yielding for responsiveness.
95
102
  */
96
- protected pushAllGridRowDataToArray(originalDaraArray: Array<Array<string | ExcelColumnMetadata | number>>, columns: Column[]): Array<Array<string | ExcelColumnMetadata | number>>;
103
+ protected pushAllGridRowDataToArrayAsync(originalDaraArray: Array<Array<string | ExcelColumnMetadata | number>>, columns: Column[]): Promise<Array<Array<string | ExcelColumnMetadata | number>>>;
104
+ /** OPTIMIZATION: Pre-calculate column metadata to avoid repeated calculations */
105
+ protected preCalculateColumnMetadata(columns: Column[]): Map<string, any>;
106
+ /** OPTIMIZATION: Efficient yielding - use the fastest available method */
107
+ protected efficientYield(): Promise<void>;
97
108
  /**
98
109
  * Get the data of a regular row (a row without grouping)
99
110
  * @param {Array<Object>} columns - column definitions
@@ -112,7 +123,7 @@ export declare class ExcelExportService implements ExternalResource, BaseExcelEx
112
123
  * @param itemObj
113
124
  */
114
125
  protected readGroupedTotalRows(columns: Column[], itemObj: any, dataRowIdx: number): Array<ExcelColumnMetadata | string | number>;
115
- /** Legacy (non-streaming) Excel export fallback method */
116
- protected legacyExcelExport(filename: string, mimeType: string, resolve: (value: boolean) => void): void;
126
+ /** Async version of legacy Excel export fallback method */
127
+ protected legacyExcelExportAsync(filename: string, mimeType: string): Promise<boolean>;
117
128
  }
118
129
  //# sourceMappingURL=excelExport.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"excelExport.service.d.ts","sourceRoot":"","sources":["../src/excelExport.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"excelExport.service.d.ts","sourceRoot":"","sources":["../src/excelExport.service.ts"],"names":[],"mappings":"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"}
@@ -65,93 +65,96 @@ export class ExcelExportService {
65
65
  }
66
66
  }
67
67
  /**
68
- * Function to export the Grid result to an Excel CSV format using JavaScript for it to produce the CSV file.
69
- * This is a WYSIWYG export to file output (What You See is What You Get)
68
+ * Export the current grid data to Excel (WYSIWYG).
70
69
  *
71
- * NOTES: The column position needs to match perfectly the JSON Object position because of the way we are pulling the data,
72
- * which means that if any column(s) got moved in the UI, it has to be reflected in the JSON array output as well
70
+ * Notes:
71
+ * - Column order must match the grid.
72
+ * - For large datasets, processing yields periodically to keep the UI responsive.
73
73
  *
74
- * Example: exportToExcel({ format: FileType.csv, delimiter: DelimiterType.comma })
74
+ * Events:
75
+ * - 'onBeforeExportToExcel' before export starts
76
+ * - 'onAfterExportToExcel' after export completes or fails
75
77
  */
76
- exportToExcel(options) {
78
+ async exportToExcel(options) {
77
79
  if (!this._grid || !this._dataView || !this._pubSubService) {
78
80
  throw new Error('[Slickgrid-Universal] it seems that the SlickGrid & DataView objects and/or PubSubService are not initialized did you forget to enable the grid option flag "enableExcelExport"?');
79
81
  }
80
- // wrap in a Promise so that we can add loading spinner
81
- return new Promise((resolve) => {
82
- this._pubSubService?.publish('onBeforeExportToExcel', true);
83
- this._excelExportOptions = extend(true, {}, { ...DEFAULT_EXPORT_OPTIONS, ...this._gridOptions.excelExportOptions, ...options });
84
- this._fileFormat = this._excelExportOptions.format || FileType.xlsx;
85
- const useStreamingExport = !!this._excelExportOptions.useStreamingExport;
86
- // reset references of detected Excel formats
87
- this._regularCellExcelFormats = {};
88
- this._groupTotalExcelFormats = {};
89
- // prepare the Excel Workbook & Sheet
90
- const worksheetOptions = { name: this._excelExportOptions.sheetName || 'Sheet1' };
91
- this._workbook = new Workbook();
92
- this._sheet = this._workbook.createWorksheet(worksheetOptions);
93
- // add any Excel Format/Stylesheet to current Workbook
94
- this._stylesheet = this._workbook.getStyleSheet();
95
- // create some common default Excel formatters that will be used
96
- const boldFormat = this._stylesheet.createFormat({ font: { bold: true } });
97
- const stringFormat = this._stylesheet.createFormat({ format: '@' });
98
- const numberFormat = this._stylesheet.createFormat({ format: '0' });
99
- this._stylesheetFormats = { boldFormat, numberFormat, stringFormat };
100
- this._sheet.setColumnFormats([boldFormat]);
101
- // Add a short delay to ensure spinner/UI updates before heavy export work begins
102
- setTimeout(async () => {
103
- // get all data by reading all DataView rows
104
- const dataOutput = this.getDataOutput();
105
- if (this._gridOptions?.excelExportOptions?.customExcelHeader) {
106
- this._gridOptions.excelExportOptions.customExcelHeader(this._workbook, this._sheet);
107
- }
108
- const columns = this._grid?.getColumns() || [];
109
- this._sheet.setColumns(this.getColumnStyles(columns));
110
- const currentSheetData = this._sheet.data;
111
- let finalOutput = currentSheetData;
112
- if (Array.isArray(currentSheetData) && Array.isArray(dataOutput)) {
113
- finalOutput = this._sheet.data.concat(dataOutput);
114
- }
115
- this._sheet.setData(finalOutput);
116
- this._workbook.addWorksheet(this._sheet);
117
- // MIME type could be undefined, if that's the case we'll detect the type by its file extension
118
- // user could also provide its own mime type, if however an empty string is provided we will consider to be without any MIME type)
119
- let mimeType = this._excelExportOptions?.mimeType;
120
- if (mimeType === undefined) {
121
- mimeType =
122
- this._fileFormat === FileType.xls
123
- ? 'application/vnd.ms-excel'
124
- : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
125
- }
126
- const filename = `${this._excelExportOptions.filename}.${this._fileFormat}`;
127
- if (this._fileFormat === FileType.xlsx && useStreamingExport) {
128
- try {
129
- const stream = createExcelFileStream(this._workbook, { chunkSize: 1000 });
130
- const chunks = [];
131
- for await (const chunk of stream) {
132
- chunks.push(chunk);
133
- }
134
- const blob = new Blob(chunks, { type: mimeType });
135
- const url = URL.createObjectURL(blob);
136
- // download with anchor tag
137
- const a = createDomElement('a', { href: url, download: filename }, document.body);
138
- a.click();
139
- document.body.removeChild(a);
140
- URL.revokeObjectURL(url);
141
- this._pubSubService?.publish('onAfterExportToExcel', { filename, mimeType });
142
- resolve(true);
143
- }
144
- catch (err) {
145
- // fallback to legacy export if streaming is not supported
146
- this.legacyExcelExport(filename, mimeType, resolve);
82
+ this._pubSubService?.publish('onBeforeExportToExcel', true);
83
+ this._excelExportOptions = extend(true, {}, { ...DEFAULT_EXPORT_OPTIONS, ...this._gridOptions.excelExportOptions, ...options });
84
+ this._fileFormat = this._excelExportOptions.format || FileType.xlsx;
85
+ const useStreamingExport = !!this._excelExportOptions.useStreamingExport;
86
+ // reset references of detected Excel formats
87
+ this._regularCellExcelFormats = {};
88
+ this._groupTotalExcelFormats = {};
89
+ // prepare the Excel Workbook & Sheet
90
+ const worksheetOptions = { name: this._excelExportOptions.sheetName || 'Sheet1' };
91
+ this._workbook = new Workbook();
92
+ this._sheet = this._workbook.createWorksheet(worksheetOptions);
93
+ // add any Excel Format/Stylesheet to current Workbook
94
+ this._stylesheet = this._workbook.getStyleSheet();
95
+ // create some common default Excel formatters that will be used
96
+ const boldFormat = this._stylesheet.createFormat({ font: { bold: true } });
97
+ const stringFormat = this._stylesheet.createFormat({ format: '@' });
98
+ const numberFormat = this._stylesheet.createFormat({ format: '0' });
99
+ this._stylesheetFormats = { boldFormat, numberFormat, stringFormat };
100
+ this._sheet.setColumnFormats([boldFormat]);
101
+ try {
102
+ // get all data by reading all DataView rows with yielding for responsiveness
103
+ const dataOutput = await this.getDataOutputAsync();
104
+ if (this._gridOptions?.excelExportOptions?.customExcelHeader) {
105
+ this._gridOptions.excelExportOptions.customExcelHeader(this._workbook, this._sheet);
106
+ }
107
+ const columns = this._grid?.getColumns() || [];
108
+ this._sheet.setColumns(this.getColumnStyles(columns));
109
+ const currentSheetData = this._sheet.data;
110
+ let finalOutput = currentSheetData;
111
+ if (Array.isArray(currentSheetData) && Array.isArray(dataOutput)) {
112
+ finalOutput = this._sheet.data.concat(dataOutput);
113
+ }
114
+ this._sheet.setData(finalOutput);
115
+ this._workbook.addWorksheet(this._sheet);
116
+ // MIME type could be undefined, if that's the case we'll detect the type by its file extension
117
+ // user could also provide its own mime type, if however an empty string is provided we will consider to be without any MIME type)
118
+ let mimeType = this._excelExportOptions?.mimeType;
119
+ if (mimeType === undefined) {
120
+ mimeType =
121
+ this._fileFormat === FileType.xls
122
+ ? 'application/vnd.ms-excel'
123
+ : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
124
+ }
125
+ const filename = `${this._excelExportOptions.filename}.${this._fileFormat}`;
126
+ if (this._fileFormat === FileType.xlsx && useStreamingExport) {
127
+ try {
128
+ const stream = createExcelFileStream(this._workbook, { chunkSize: 1000 });
129
+ const chunks = [];
130
+ for await (const chunk of stream) {
131
+ chunks.push(chunk);
147
132
  }
133
+ const blob = new Blob(chunks, { type: mimeType });
134
+ const url = URL.createObjectURL(blob);
135
+ // download with anchor tag
136
+ const a = createDomElement('a', { href: url, download: filename }, document.body);
137
+ a.click();
138
+ document.body.removeChild(a);
139
+ URL.revokeObjectURL(url);
140
+ this._pubSubService?.publish('onAfterExportToExcel', { filename, mimeType });
141
+ return true;
148
142
  }
149
- else {
150
- // fallback to legacy export for non-xlsx or if useStreamingExport is false
151
- this.legacyExcelExport(filename, mimeType, resolve);
143
+ catch (err) {
144
+ // fallback to legacy export if streaming is not supported
145
+ return await this.legacyExcelExportAsync(filename, mimeType);
152
146
  }
153
- }, 50); // delay to allow spinner to show
154
- });
147
+ }
148
+ else {
149
+ // fallback to legacy export for non-xlsx or if useStreamingExport is false
150
+ return await this.legacyExcelExportAsync(filename, mimeType);
151
+ }
152
+ } /** v8 ignore next */
153
+ catch (error) {
154
+ console.error('Excel export failed:', error);
155
+ this._pubSubService?.publish('onAfterExportToExcel', { error });
156
+ return false;
157
+ }
155
158
  }
156
159
  /**
157
160
  * Takes a positive integer and returns the corresponding column name.
@@ -176,7 +179,10 @@ export class ExcelExportService {
176
179
  // -----------------------
177
180
  // protected functions
178
181
  // -----------------------
179
- getDataOutput() {
182
+ /**
183
+ * Async version of getDataOutput with yielding for UI responsiveness during large dataset processing
184
+ */
185
+ async getDataOutputAsync() {
180
186
  const columns = this._grid?.getColumns() || [];
181
187
  // data variable which will hold all the fields data of a row
182
188
  const outputData = [];
@@ -187,7 +193,9 @@ export class ExcelExportService {
187
193
  columnHeaderStyleId = this._stylesheet.createFormat(columnHeaderStyle).id;
188
194
  }
189
195
  // get all Grouped Column Header Titles when defined (from pre-header row)
190
- if (this._gridOptions.createPreHeaderPanel && this._gridOptions.showPreHeaderPanel && !this._gridOptions.enableDraggableGrouping) {
196
+ if (this._gridOptions.createPreHeaderPanel &&
197
+ this._gridOptions.showPreHeaderPanel &&
198
+ (!this._gridOptions.enableDraggableGrouping || (this._gridOptions.enableDraggableGrouping && this._gridOptions.createTopHeaderPanel))) {
191
199
  // when having Grouped Header Titles (in the pre-header), then make the cell Bold & Aligned Center
192
200
  const boldCenterAlign = this._stylesheet.createFormat({ alignment: { horizontal: 'center' }, font: { bold: true } });
193
201
  outputData.push(this.getColumnGroupedHeaderTitlesData(columns, { style: boldCenterAlign?.id }));
@@ -196,8 +204,8 @@ export class ExcelExportService {
196
204
  // get all Column Header Titles (it might include a "Group by" title at A1 cell)
197
205
  // also style the headers, defaults to Bold but user could pass his own style
198
206
  outputData.push(this.getColumnHeaderData(columns, { style: columnHeaderStyleId }));
199
- // Populate the rest of the Grid Data
200
- this.pushAllGridRowDataToArray(outputData, columns);
207
+ // Populate the rest of the Grid Data by reading directly from DataView with yielding for responsiveness
208
+ await this.pushAllGridRowDataToArrayAsync(outputData, columns);
201
209
  return outputData;
202
210
  }
203
211
  /** Get each column style including a style for the width of each column */
@@ -229,21 +237,26 @@ export class ExcelExportService {
229
237
  * @returns {Object} array of Excel cell format
230
238
  */
231
239
  getColumnGroupedHeaderTitlesData(columns, metadata) {
240
+ let colspanStartIndex = 0;
241
+ let headerOffset = 0; // increases when "Group by" is provided in the next header row
232
242
  let outputGroupedHeaderTitles = [];
243
+ if (this.getGroupColumnTitle()) {
244
+ outputGroupedHeaderTitles.push({ value: '' });
245
+ headerOffset = 1;
246
+ }
233
247
  // get all Column Header Titles
234
248
  this._groupedColumnHeaders = this.getColumnGroupedHeaderTitles(columns) || [];
235
- if (this._groupedColumnHeaders && Array.isArray(this._groupedColumnHeaders) && this._groupedColumnHeaders.length > 0) {
249
+ if (Array.isArray(this._groupedColumnHeaders) && this._groupedColumnHeaders.length > 0) {
236
250
  // add the header row + add a new line at the end of the row
237
- outputGroupedHeaderTitles = this._groupedColumnHeaders.map((header) => ({ value: header.title, metadata }));
251
+ outputGroupedHeaderTitles.push(...this._groupedColumnHeaders.map((header) => ({ value: header.title, metadata })));
238
252
  }
239
253
  // merge necessary cells (any grouped header titles)
240
- let colspanStartIndex = 0;
241
254
  const headersLn = this._groupedColumnHeaders.length;
242
255
  for (let cellIndex = 0; cellIndex < headersLn; cellIndex++) {
243
256
  if (cellIndex + 1 === headersLn ||
244
257
  (cellIndex + 1 < headersLn && this._groupedColumnHeaders[cellIndex].title !== this._groupedColumnHeaders[cellIndex + 1].title)) {
245
- const leftExcelColumnChar = this.getExcelColumnNameByIndex(colspanStartIndex + 1);
246
- const rightExcelColumnChar = this.getExcelColumnNameByIndex(cellIndex + 1);
258
+ const leftExcelColumnChar = this.getExcelColumnNameByIndex(colspanStartIndex + 1 + headerOffset);
259
+ const rightExcelColumnChar = this.getExcelColumnNameByIndex(cellIndex + 1 + headerOffset);
247
260
  this._sheet.mergeCells(`${leftExcelColumnChar}1`, `${rightExcelColumnChar}1`);
248
261
  // next group starts 1 column index away
249
262
  colspanStartIndex = cellIndex + 1;
@@ -269,7 +282,7 @@ export class ExcelExportService {
269
282
  }
270
283
  getGroupColumnTitle() {
271
284
  // Group By text, it could be set in the export options or from translation or if nothing is found then use the English constant text
272
- let groupByColumnHeader = this._excelExportOptions.groupingColumnHeaderTitle;
285
+ let groupByColumnHeader = this._excelExportOptions?.groupingColumnHeaderTitle ?? '';
273
286
  if (!groupByColumnHeader && this._gridOptions.enableTranslate && this._translaterService?.translate) {
274
287
  groupByColumnHeader = this._translaterService.translate(`${getTranslationPrefix(this._gridOptions)}GROUP_BY`);
275
288
  }
@@ -283,9 +296,7 @@ export class ExcelExportService {
283
296
  this._hasGroupedItems = true;
284
297
  return groupByColumnHeader;
285
298
  }
286
- else {
287
- this._hasGroupedItems = false;
288
- }
299
+ this._hasGroupedItems = false;
289
300
  return null;
290
301
  }
291
302
  /**
@@ -297,13 +308,9 @@ export class ExcelExportService {
297
308
  if (Array.isArray(columns)) {
298
309
  // Populate the Grouped Column Header, pull the columnGroup(Key) defined
299
310
  columns.forEach((columnDef) => {
300
- let groupedHeaderTitle = '';
301
- if (columnDef.columnGroupKey && this._gridOptions.enableTranslate && this._translaterService?.translate) {
302
- groupedHeaderTitle = this._translaterService.translate(columnDef.columnGroupKey);
303
- }
304
- else {
305
- groupedHeaderTitle = columnDef.columnGroup || '';
306
- }
311
+ const groupedHeaderTitle = columnDef.columnGroupKey && this._gridOptions.enableTranslate && this._translaterService?.translate
312
+ ? this._translaterService.translate(columnDef.columnGroupKey)
313
+ : columnDef.columnGroup || '';
307
314
  const skippedField = columnDef.excludeFromExport || false;
308
315
  // if column width is 0px, then we consider that field as a hidden field and should not be part of the export
309
316
  if ((columnDef.width === undefined || columnDef.width > 0) && !skippedField) {
@@ -346,18 +353,26 @@ export class ExcelExportService {
346
353
  }
347
354
  /**
348
355
  * Get all the grid row data and return that as an output string
356
+ * Async version of pushAllGridRowDataToArray with yielding for UI responsiveness during large dataset processing.
357
+ * Processes rows directly from DataView with periodic yielding for responsiveness.
349
358
  */
350
- pushAllGridRowDataToArray(originalDaraArray, columns) {
351
- const lineCount = this._dataView.getLength();
352
- // loop through all the grid rows of data
359
+ async pushAllGridRowDataToArrayAsync(originalDaraArray, columns) {
360
+ const dataView = this._dataView;
361
+ const lineCount = dataView.getLength();
362
+ // Yield periodically based on dataset size
363
+ const YIELD_FREQUENCY = lineCount < 1000 ? 0 : lineCount < 10000 ? 1000 : 500;
364
+ // Update the hasGroupedItems flag from current grouping
365
+ const grouping = dataView.getGrouping();
366
+ this._hasGroupedItems = Array.isArray(grouping) && grouping.length > 0;
367
+ // Read rows directly from DataView
353
368
  for (let rowNumber = 0; rowNumber < lineCount; rowNumber++) {
354
- const itemObj = this._dataView.getItem(rowNumber);
369
+ const itemObj = dataView.getItem(rowNumber);
355
370
  // make sure we have a filled object AND that the item doesn't include the "getItem" method
356
371
  // this happen could happen with an opened Row Detail as it seems to include an empty Slick DataView (we'll just skip those lines)
357
372
  if (itemObj && !itemObj.hasOwnProperty('getItem')) {
358
373
  // Normal row (not grouped by anything) would have an ID which was predefined in the Grid Columns definition
359
374
  if (itemObj[this._datasetIdPropName] !== null && itemObj[this._datasetIdPropName] !== undefined) {
360
- // get regular row item data
375
+ // Read a regular row
361
376
  originalDaraArray.push(this.readRegularRowData(columns, rowNumber, itemObj, rowNumber));
362
377
  }
363
378
  else if (this._hasGroupedItems && itemObj.__groupTotals === undefined) {
@@ -365,13 +380,53 @@ export class ExcelExportService {
365
380
  originalDaraArray.push([this.readGroupedRowTitle(itemObj)]);
366
381
  }
367
382
  else if (itemObj.__groupTotals) {
368
- // else if the row is a Group By and we have agreggators, then a property of '__groupTotals' would exist under that object
383
+ // else if the row is a Group By and we have aggregators, then a property of '__groupTotals' would exist under that object
369
384
  originalDaraArray.push(this.readGroupedTotalRows(columns, itemObj, rowNumber));
370
385
  }
371
386
  }
387
+ // Yield to event loop
388
+ if (YIELD_FREQUENCY > 0 && rowNumber > 0 && rowNumber % YIELD_FREQUENCY === 0) {
389
+ await new Promise((resolve) => setTimeout(resolve, 0));
390
+ }
372
391
  }
373
392
  return originalDaraArray;
374
393
  }
394
+ /** OPTIMIZATION: Pre-calculate column metadata to avoid repeated calculations */
395
+ preCalculateColumnMetadata(columns) {
396
+ const cache = new Map();
397
+ // OPTIMIZATION: Pre-calculate if we have complex spanning to avoid checking on every row
398
+ const hasComplexSpanning = this._gridOptions.enableCellRowSpan || columns.some((col) => col.colspan || col.rowspan);
399
+ for (const columnDef of columns) {
400
+ if (!columnDef.excludeFromExport) {
401
+ const fieldType = getColumnFieldType(columnDef);
402
+ const exportOptions = { ...this._excelExportOptions };
403
+ // Pre-calculate date formatting logic
404
+ if (columnDef.exportWithFormatter !== false && isColumnDateType(fieldType)) {
405
+ exportOptions.exportWithFormatter = true;
406
+ }
407
+ cache.set(String(columnDef.id), {
408
+ fieldType,
409
+ exportOptions,
410
+ hasFormatter: !!columnDef.formatter,
411
+ sanitizeData: columnDef.sanitizeDataExport || this._excelExportOptions.sanitizeDataExport,
412
+ field: columnDef.field,
413
+ hasComplexSpanning, // Cache this to avoid repeated checks
414
+ });
415
+ }
416
+ }
417
+ return cache;
418
+ }
419
+ /** OPTIMIZATION: Efficient yielding - use the fastest available method */
420
+ async efficientYield() {
421
+ // Use scheduler.postTask if available (Chrome 94+) - fastest
422
+ if (typeof globalThis.scheduler?.postTask === 'function') {
423
+ return new Promise((resolve) => {
424
+ globalThis.scheduler.postTask(resolve, { priority: 'user-blocking' });
425
+ });
426
+ }
427
+ // Use setTimeout(0) - most reliable and often fastest
428
+ return new Promise((resolve) => setTimeout(resolve, 0));
429
+ }
375
430
  /**
376
431
  * Get the data of a regular row (a row without grouping)
377
432
  * @param {Array<Object>} columns - column definitions
@@ -591,12 +646,18 @@ export class ExcelExportService {
591
646
  });
592
647
  return outputStrings;
593
648
  }
594
- /** Legacy (non-streaming) Excel export fallback method */
595
- legacyExcelExport(filename, mimeType, resolve) {
596
- downloadExcelFile(this._workbook, filename, { mimeType }).then(() => {
649
+ /** Async version of legacy Excel export fallback method */
650
+ async legacyExcelExportAsync(filename, mimeType) {
651
+ try {
652
+ await downloadExcelFile(this._workbook, filename, { mimeType });
597
653
  this._pubSubService?.publish(`onAfterExportToExcel`, { filename, mimeType });
598
- resolve(true);
599
- });
654
+ return true;
655
+ }
656
+ catch (error) {
657
+ console.error('Legacy Excel export failed:', error);
658
+ this._pubSubService?.publish('onAfterExportToExcel', { error });
659
+ return false;
660
+ }
600
661
  }
601
662
  }
602
663
  //# sourceMappingURL=excelExport.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"excelExport.service.js","sourceRoot":"","sources":["../src/excelExport.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"excelExport.service.js","sourceRoot":"","sources":["../src/excelExport.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slickgrid-universal/excel-export",
3
- "version": "9.11.0",
3
+ "version": "9.13.0",
4
4
  "description": "Excel Export (xls/xlsx) Service.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -31,13 +31,13 @@
31
31
  "url": "https://github.com/ghiscoding/slickgrid-universal/issues"
32
32
  },
33
33
  "dependencies": {
34
- "@slickgrid-universal/common": "9.11.0",
35
- "@slickgrid-universal/utils": "9.11.0",
34
+ "@slickgrid-universal/common": "9.13.0",
35
+ "@slickgrid-universal/utils": "9.13.0",
36
36
  "excel-builder-vanilla": "^4.2.1"
37
37
  },
38
38
  "funding": {
39
39
  "type": "ko_fi",
40
40
  "url": "https://ko-fi.com/ghiscoding"
41
41
  },
42
- "gitHead": "da43b7628f1c55f9178ec389e5c4b2b89f586599"
42
+ "gitHead": "2f8344e34f8c8409895ab1827036f8c5701acd63"
43
43
  }
@@ -133,107 +133,110 @@ export class ExcelExportService implements ExternalResource, BaseExcelExportServ
133
133
  }
134
134
 
135
135
  /**
136
- * Function to export the Grid result to an Excel CSV format using JavaScript for it to produce the CSV file.
137
- * This is a WYSIWYG export to file output (What You See is What You Get)
136
+ * Export the current grid data to Excel (WYSIWYG).
138
137
  *
139
- * NOTES: The column position needs to match perfectly the JSON Object position because of the way we are pulling the data,
140
- * which means that if any column(s) got moved in the UI, it has to be reflected in the JSON array output as well
138
+ * Notes:
139
+ * - Column order must match the grid.
140
+ * - For large datasets, processing yields periodically to keep the UI responsive.
141
141
  *
142
- * Example: exportToExcel({ format: FileType.csv, delimiter: DelimiterType.comma })
142
+ * Events:
143
+ * - 'onBeforeExportToExcel' before export starts
144
+ * - 'onAfterExportToExcel' after export completes or fails
143
145
  */
144
- exportToExcel(options?: ExcelExportOption): Promise<boolean> {
146
+ async exportToExcel(options?: ExcelExportOption): Promise<boolean> {
145
147
  if (!this._grid || !this._dataView || !this._pubSubService) {
146
148
  throw new Error(
147
149
  '[Slickgrid-Universal] it seems that the SlickGrid & DataView objects and/or PubSubService are not initialized did you forget to enable the grid option flag "enableExcelExport"?'
148
150
  );
149
151
  }
150
- // wrap in a Promise so that we can add loading spinner
151
- return new Promise((resolve) => {
152
- this._pubSubService?.publish('onBeforeExportToExcel', true);
153
- this._excelExportOptions = extend(true, {}, { ...DEFAULT_EXPORT_OPTIONS, ...this._gridOptions.excelExportOptions, ...options });
154
- this._fileFormat = this._excelExportOptions.format || FileType.xlsx;
155
- const useStreamingExport = !!this._excelExportOptions.useStreamingExport;
156
-
157
- // reset references of detected Excel formats
158
- this._regularCellExcelFormats = {};
159
- this._groupTotalExcelFormats = {};
160
-
161
- // prepare the Excel Workbook & Sheet
162
- const worksheetOptions = { name: this._excelExportOptions.sheetName || 'Sheet1' };
163
- this._workbook = new Workbook();
164
- this._sheet = this._workbook.createWorksheet(worksheetOptions);
165
-
166
- // add any Excel Format/Stylesheet to current Workbook
167
- this._stylesheet = this._workbook.getStyleSheet();
168
-
169
- // create some common default Excel formatters that will be used
170
- const boldFormat = this._stylesheet.createFormat({ font: { bold: true } });
171
- const stringFormat = this._stylesheet.createFormat({ format: '@' });
172
- const numberFormat = this._stylesheet.createFormat({ format: '0' });
173
- this._stylesheetFormats = { boldFormat, numberFormat, stringFormat };
174
- this._sheet.setColumnFormats([boldFormat]);
175
-
176
- // Add a short delay to ensure spinner/UI updates before heavy export work begins
177
- setTimeout(async () => {
178
- // get all data by reading all DataView rows
179
- const dataOutput = this.getDataOutput();
180
-
181
- if (this._gridOptions?.excelExportOptions?.customExcelHeader) {
182
- this._gridOptions.excelExportOptions.customExcelHeader(this._workbook, this._sheet);
183
- }
184
152
 
185
- const columns = this._grid?.getColumns() || [];
186
- this._sheet.setColumns(this.getColumnStyles(columns));
153
+ this._pubSubService?.publish('onBeforeExportToExcel', true);
154
+ this._excelExportOptions = extend(true, {}, { ...DEFAULT_EXPORT_OPTIONS, ...this._gridOptions.excelExportOptions, ...options });
155
+ this._fileFormat = this._excelExportOptions.format || FileType.xlsx;
156
+ const useStreamingExport = !!this._excelExportOptions.useStreamingExport;
187
157
 
188
- const currentSheetData = this._sheet.data;
189
- let finalOutput = currentSheetData;
190
- if (Array.isArray(currentSheetData) && Array.isArray(dataOutput)) {
191
- finalOutput = this._sheet.data.concat(dataOutput);
192
- }
158
+ // reset references of detected Excel formats
159
+ this._regularCellExcelFormats = {};
160
+ this._groupTotalExcelFormats = {};
193
161
 
194
- this._sheet.setData(finalOutput);
195
- this._workbook.addWorksheet(this._sheet);
196
-
197
- // MIME type could be undefined, if that's the case we'll detect the type by its file extension
198
- // user could also provide its own mime type, if however an empty string is provided we will consider to be without any MIME type)
199
- let mimeType = this._excelExportOptions?.mimeType;
200
- if (mimeType === undefined) {
201
- mimeType =
202
- this._fileFormat === FileType.xls
203
- ? 'application/vnd.ms-excel'
204
- : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
205
- }
162
+ // prepare the Excel Workbook & Sheet
163
+ const worksheetOptions = { name: this._excelExportOptions.sheetName || 'Sheet1' };
164
+ this._workbook = new Workbook();
165
+ this._sheet = this._workbook.createWorksheet(worksheetOptions);
166
+
167
+ // add any Excel Format/Stylesheet to current Workbook
168
+ this._stylesheet = this._workbook.getStyleSheet();
169
+
170
+ // create some common default Excel formatters that will be used
171
+ const boldFormat = this._stylesheet.createFormat({ font: { bold: true } });
172
+ const stringFormat = this._stylesheet.createFormat({ format: '@' });
173
+ const numberFormat = this._stylesheet.createFormat({ format: '0' });
174
+ this._stylesheetFormats = { boldFormat, numberFormat, stringFormat };
175
+ this._sheet.setColumnFormats([boldFormat]);
176
+
177
+ try {
178
+ // get all data by reading all DataView rows with yielding for responsiveness
179
+ const dataOutput = await this.getDataOutputAsync();
180
+
181
+ if (this._gridOptions?.excelExportOptions?.customExcelHeader) {
182
+ this._gridOptions.excelExportOptions.customExcelHeader(this._workbook, this._sheet);
183
+ }
184
+
185
+ const columns = this._grid?.getColumns() || [];
186
+ this._sheet.setColumns(this.getColumnStyles(columns));
187
+
188
+ const currentSheetData = this._sheet.data;
189
+ let finalOutput = currentSheetData;
190
+ if (Array.isArray(currentSheetData) && Array.isArray(dataOutput)) {
191
+ finalOutput = this._sheet.data.concat(dataOutput);
192
+ }
193
+
194
+ this._sheet.setData(finalOutput);
195
+ this._workbook.addWorksheet(this._sheet);
196
+
197
+ // MIME type could be undefined, if that's the case we'll detect the type by its file extension
198
+ // user could also provide its own mime type, if however an empty string is provided we will consider to be without any MIME type)
199
+ let mimeType = this._excelExportOptions?.mimeType;
200
+ if (mimeType === undefined) {
201
+ mimeType =
202
+ this._fileFormat === FileType.xls
203
+ ? 'application/vnd.ms-excel'
204
+ : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
205
+ }
206
+
207
+ const filename = `${this._excelExportOptions.filename}.${this._fileFormat}`;
206
208
 
207
- const filename = `${this._excelExportOptions.filename}.${this._fileFormat}`;
208
-
209
- if (this._fileFormat === FileType.xlsx && useStreamingExport) {
210
- try {
211
- const stream = createExcelFileStream(this._workbook, { chunkSize: 1000 });
212
- const chunks: Uint8Array[] = [];
213
- for await (const chunk of stream as AsyncIterable<Uint8Array>) {
214
- chunks.push(chunk);
215
- }
216
-
217
- const blob = new Blob(chunks as BlobPart[], { type: mimeType });
218
- const url = URL.createObjectURL(blob);
219
-
220
- // download with anchor tag
221
- const a = createDomElement('a', { href: url, download: filename }, document.body);
222
- a.click();
223
- document.body.removeChild(a);
224
- URL.revokeObjectURL(url);
225
- this._pubSubService?.publish('onAfterExportToExcel', { filename, mimeType });
226
- resolve(true);
227
- } catch (err) {
228
- // fallback to legacy export if streaming is not supported
229
- this.legacyExcelExport(filename, mimeType, resolve);
209
+ if (this._fileFormat === FileType.xlsx && useStreamingExport) {
210
+ try {
211
+ const stream = createExcelFileStream(this._workbook, { chunkSize: 1000 });
212
+ const chunks: Uint8Array[] = [];
213
+ for await (const chunk of stream as AsyncIterable<Uint8Array>) {
214
+ chunks.push(chunk);
230
215
  }
231
- } else {
232
- // fallback to legacy export for non-xlsx or if useStreamingExport is false
233
- this.legacyExcelExport(filename, mimeType, resolve);
216
+
217
+ const blob = new Blob(chunks as BlobPart[], { type: mimeType });
218
+ const url = URL.createObjectURL(blob);
219
+
220
+ // download with anchor tag
221
+ const a = createDomElement('a', { href: url, download: filename }, document.body);
222
+ a.click();
223
+ document.body.removeChild(a);
224
+ URL.revokeObjectURL(url);
225
+ this._pubSubService?.publish('onAfterExportToExcel', { filename, mimeType });
226
+ return true;
227
+ } catch (err) {
228
+ // fallback to legacy export if streaming is not supported
229
+ return await this.legacyExcelExportAsync(filename, mimeType);
234
230
  }
235
- }, 50); // delay to allow spinner to show
236
- });
231
+ } else {
232
+ // fallback to legacy export for non-xlsx or if useStreamingExport is false
233
+ return await this.legacyExcelExportAsync(filename, mimeType);
234
+ }
235
+ } /** v8 ignore next */ catch (error) {
236
+ console.error('Excel export failed:', error);
237
+ this._pubSubService?.publish('onAfterExportToExcel', { error });
238
+ return false;
239
+ }
237
240
  }
238
241
 
239
242
  /**
@@ -264,7 +267,10 @@ export class ExcelExportService implements ExternalResource, BaseExcelExportServ
264
267
  // protected functions
265
268
  // -----------------------
266
269
 
267
- protected getDataOutput(): Array<string[] | ExcelColumnMetadata[]> {
270
+ /**
271
+ * Async version of getDataOutput with yielding for UI responsiveness during large dataset processing
272
+ */
273
+ protected async getDataOutputAsync(): Promise<Array<string[] | ExcelColumnMetadata[]>> {
268
274
  const columns = this._grid?.getColumns() || [];
269
275
 
270
276
  // data variable which will hold all the fields data of a row
@@ -277,7 +283,11 @@ export class ExcelExportService implements ExternalResource, BaseExcelExportServ
277
283
  }
278
284
 
279
285
  // get all Grouped Column Header Titles when defined (from pre-header row)
280
- if (this._gridOptions.createPreHeaderPanel && this._gridOptions.showPreHeaderPanel && !this._gridOptions.enableDraggableGrouping) {
286
+ if (
287
+ this._gridOptions.createPreHeaderPanel &&
288
+ this._gridOptions.showPreHeaderPanel &&
289
+ (!this._gridOptions.enableDraggableGrouping || (this._gridOptions.enableDraggableGrouping && this._gridOptions.createTopHeaderPanel))
290
+ ) {
281
291
  // when having Grouped Header Titles (in the pre-header), then make the cell Bold & Aligned Center
282
292
  const boldCenterAlign = this._stylesheet.createFormat({ alignment: { horizontal: 'center' }, font: { bold: true } });
283
293
  outputData.push(this.getColumnGroupedHeaderTitlesData(columns, { style: boldCenterAlign?.id }));
@@ -288,8 +298,8 @@ export class ExcelExportService implements ExternalResource, BaseExcelExportServ
288
298
  // also style the headers, defaults to Bold but user could pass his own style
289
299
  outputData.push(this.getColumnHeaderData(columns, { style: columnHeaderStyleId }));
290
300
 
291
- // Populate the rest of the Grid Data
292
- this.pushAllGridRowDataToArray(outputData, columns);
301
+ // Populate the rest of the Grid Data by reading directly from DataView with yielding for responsiveness
302
+ await this.pushAllGridRowDataToArrayAsync(outputData, columns);
293
303
 
294
304
  return outputData;
295
305
  }
@@ -325,25 +335,31 @@ export class ExcelExportService implements ExternalResource, BaseExcelExportServ
325
335
  * @returns {Object} array of Excel cell format
326
336
  */
327
337
  protected getColumnGroupedHeaderTitlesData(columns: Column[], metadata: ExcelMetadata): Array<ExcelColumnMetadata> {
338
+ let colspanStartIndex = 0;
339
+ let headerOffset = 0; // increases when "Group by" is provided in the next header row
328
340
  let outputGroupedHeaderTitles: Array<ExcelColumnMetadata> = [];
329
341
 
342
+ if (this.getGroupColumnTitle()) {
343
+ outputGroupedHeaderTitles.push({ value: '' });
344
+ headerOffset = 1;
345
+ }
346
+
330
347
  // get all Column Header Titles
331
348
  this._groupedColumnHeaders = this.getColumnGroupedHeaderTitles(columns) || [];
332
- if (this._groupedColumnHeaders && Array.isArray(this._groupedColumnHeaders) && this._groupedColumnHeaders.length > 0) {
349
+ if (Array.isArray(this._groupedColumnHeaders) && this._groupedColumnHeaders.length > 0) {
333
350
  // add the header row + add a new line at the end of the row
334
- outputGroupedHeaderTitles = this._groupedColumnHeaders.map((header) => ({ value: header.title, metadata }));
351
+ outputGroupedHeaderTitles.push(...this._groupedColumnHeaders.map((header) => ({ value: header.title, metadata })));
335
352
  }
336
353
 
337
354
  // merge necessary cells (any grouped header titles)
338
- let colspanStartIndex = 0;
339
355
  const headersLn = this._groupedColumnHeaders.length;
340
356
  for (let cellIndex = 0; cellIndex < headersLn; cellIndex++) {
341
357
  if (
342
358
  cellIndex + 1 === headersLn ||
343
359
  (cellIndex + 1 < headersLn && this._groupedColumnHeaders[cellIndex].title !== this._groupedColumnHeaders[cellIndex + 1].title)
344
360
  ) {
345
- const leftExcelColumnChar = this.getExcelColumnNameByIndex(colspanStartIndex + 1);
346
- const rightExcelColumnChar = this.getExcelColumnNameByIndex(cellIndex + 1);
361
+ const leftExcelColumnChar = this.getExcelColumnNameByIndex(colspanStartIndex + 1 + headerOffset);
362
+ const rightExcelColumnChar = this.getExcelColumnNameByIndex(cellIndex + 1 + headerOffset);
347
363
  this._sheet.mergeCells(`${leftExcelColumnChar}1`, `${rightExcelColumnChar}1`);
348
364
 
349
365
  // next group starts 1 column index away
@@ -376,7 +392,7 @@ export class ExcelExportService implements ExternalResource, BaseExcelExportServ
376
392
 
377
393
  protected getGroupColumnTitle(): string | null {
378
394
  // Group By text, it could be set in the export options or from translation or if nothing is found then use the English constant text
379
- let groupByColumnHeader = this._excelExportOptions.groupingColumnHeaderTitle;
395
+ let groupByColumnHeader = this._excelExportOptions?.groupingColumnHeaderTitle ?? '';
380
396
  if (!groupByColumnHeader && this._gridOptions.enableTranslate && this._translaterService?.translate) {
381
397
  groupByColumnHeader = this._translaterService.translate(`${getTranslationPrefix(this._gridOptions)}GROUP_BY`);
382
398
  } else if (!groupByColumnHeader) {
@@ -389,9 +405,8 @@ export class ExcelExportService implements ExternalResource, BaseExcelExportServ
389
405
  if (Array.isArray(grouping) && grouping.length > 0) {
390
406
  this._hasGroupedItems = true;
391
407
  return groupByColumnHeader;
392
- } else {
393
- this._hasGroupedItems = false;
394
408
  }
409
+ this._hasGroupedItems = false;
395
410
  return null;
396
411
  }
397
412
 
@@ -405,12 +420,11 @@ export class ExcelExportService implements ExternalResource, BaseExcelExportServ
405
420
  if (Array.isArray(columns)) {
406
421
  // Populate the Grouped Column Header, pull the columnGroup(Key) defined
407
422
  columns.forEach((columnDef) => {
408
- let groupedHeaderTitle = '';
409
- if (columnDef.columnGroupKey && this._gridOptions.enableTranslate && this._translaterService?.translate) {
410
- groupedHeaderTitle = this._translaterService.translate(columnDef.columnGroupKey);
411
- } else {
412
- groupedHeaderTitle = columnDef.columnGroup || '';
413
- }
423
+ const groupedHeaderTitle =
424
+ columnDef.columnGroupKey && this._gridOptions.enableTranslate && this._translaterService?.translate
425
+ ? this._translaterService.translate(columnDef.columnGroupKey)
426
+ : columnDef.columnGroup || '';
427
+
414
428
  const skippedField = columnDef.excludeFromExport || false;
415
429
 
416
430
  // if column width is 0px, then we consider that field as a hidden field and should not be part of the export
@@ -457,36 +471,96 @@ export class ExcelExportService implements ExternalResource, BaseExcelExportServ
457
471
 
458
472
  /**
459
473
  * Get all the grid row data and return that as an output string
474
+ * Async version of pushAllGridRowDataToArray with yielding for UI responsiveness during large dataset processing.
475
+ * Processes rows directly from DataView with periodic yielding for responsiveness.
460
476
  */
461
- protected pushAllGridRowDataToArray(
477
+ protected async pushAllGridRowDataToArrayAsync(
462
478
  originalDaraArray: Array<Array<string | ExcelColumnMetadata | number>>,
463
479
  columns: Column[]
464
- ): Array<Array<string | ExcelColumnMetadata | number>> {
465
- const lineCount = this._dataView.getLength();
480
+ ): Promise<Array<Array<string | ExcelColumnMetadata | number>>> {
481
+ const dataView = this._dataView;
482
+ const lineCount = dataView.getLength();
483
+
484
+ // Yield periodically based on dataset size
485
+ const YIELD_FREQUENCY = lineCount < 1000 ? 0 : lineCount < 10000 ? 1000 : 500;
466
486
 
467
- // loop through all the grid rows of data
487
+ // Update the hasGroupedItems flag from current grouping
488
+ const grouping = dataView.getGrouping();
489
+ this._hasGroupedItems = Array.isArray(grouping) && grouping.length > 0;
490
+
491
+ // Read rows directly from DataView
468
492
  for (let rowNumber = 0; rowNumber < lineCount; rowNumber++) {
469
- const itemObj = this._dataView.getItem(rowNumber);
493
+ const itemObj = dataView.getItem(rowNumber);
470
494
 
471
495
  // make sure we have a filled object AND that the item doesn't include the "getItem" method
472
496
  // this happen could happen with an opened Row Detail as it seems to include an empty Slick DataView (we'll just skip those lines)
473
497
  if (itemObj && !itemObj.hasOwnProperty('getItem')) {
474
498
  // Normal row (not grouped by anything) would have an ID which was predefined in the Grid Columns definition
475
499
  if (itemObj[this._datasetIdPropName] !== null && itemObj[this._datasetIdPropName] !== undefined) {
476
- // get regular row item data
500
+ // Read a regular row
477
501
  originalDaraArray.push(this.readRegularRowData(columns, rowNumber, itemObj, rowNumber));
478
502
  } else if (this._hasGroupedItems && itemObj.__groupTotals === undefined) {
479
503
  // get the group row
480
504
  originalDaraArray.push([this.readGroupedRowTitle(itemObj)]);
481
505
  } else if (itemObj.__groupTotals) {
482
- // else if the row is a Group By and we have agreggators, then a property of '__groupTotals' would exist under that object
506
+ // else if the row is a Group By and we have aggregators, then a property of '__groupTotals' would exist under that object
483
507
  originalDaraArray.push(this.readGroupedTotalRows(columns, itemObj, rowNumber));
484
508
  }
485
509
  }
510
+
511
+ // Yield to event loop
512
+ if (YIELD_FREQUENCY > 0 && rowNumber > 0 && rowNumber % YIELD_FREQUENCY === 0) {
513
+ await new Promise((resolve) => setTimeout(resolve, 0));
514
+ }
486
515
  }
516
+
487
517
  return originalDaraArray;
488
518
  }
489
519
 
520
+ /** OPTIMIZATION: Pre-calculate column metadata to avoid repeated calculations */
521
+ protected preCalculateColumnMetadata(columns: Column[]): Map<string, any> {
522
+ const cache = new Map();
523
+
524
+ // OPTIMIZATION: Pre-calculate if we have complex spanning to avoid checking on every row
525
+ const hasComplexSpanning = this._gridOptions.enableCellRowSpan || columns.some((col) => col.colspan || col.rowspan);
526
+
527
+ for (const columnDef of columns) {
528
+ if (!columnDef.excludeFromExport) {
529
+ const fieldType = getColumnFieldType(columnDef);
530
+ const exportOptions = { ...this._excelExportOptions };
531
+
532
+ // Pre-calculate date formatting logic
533
+ if (columnDef.exportWithFormatter !== false && isColumnDateType(fieldType)) {
534
+ exportOptions.exportWithFormatter = true;
535
+ }
536
+
537
+ cache.set(String(columnDef.id), {
538
+ fieldType,
539
+ exportOptions,
540
+ hasFormatter: !!columnDef.formatter,
541
+ sanitizeData: columnDef.sanitizeDataExport || this._excelExportOptions.sanitizeDataExport,
542
+ field: columnDef.field,
543
+ hasComplexSpanning, // Cache this to avoid repeated checks
544
+ });
545
+ }
546
+ }
547
+
548
+ return cache;
549
+ }
550
+
551
+ /** OPTIMIZATION: Efficient yielding - use the fastest available method */
552
+ protected async efficientYield(): Promise<void> {
553
+ // Use scheduler.postTask if available (Chrome 94+) - fastest
554
+ if (typeof (globalThis as any).scheduler?.postTask === 'function') {
555
+ return new Promise((resolve) => {
556
+ (globalThis as any).scheduler.postTask(resolve, { priority: 'user-blocking' });
557
+ });
558
+ }
559
+
560
+ // Use setTimeout(0) - most reliable and often fastest
561
+ return new Promise((resolve) => setTimeout(resolve, 0));
562
+ }
563
+
490
564
  /**
491
565
  * Get the data of a regular row (a row without grouping)
492
566
  * @param {Array<Object>} columns - column definitions
@@ -733,11 +807,16 @@ export class ExcelExportService implements ExternalResource, BaseExcelExportServ
733
807
  return outputStrings;
734
808
  }
735
809
 
736
- /** Legacy (non-streaming) Excel export fallback method */
737
- protected legacyExcelExport(filename: string, mimeType: string, resolve: (value: boolean) => void): void {
738
- downloadExcelFile(this._workbook, filename, { mimeType }).then(() => {
810
+ /** Async version of legacy Excel export fallback method */
811
+ protected async legacyExcelExportAsync(filename: string, mimeType: string): Promise<boolean> {
812
+ try {
813
+ await downloadExcelFile(this._workbook, filename, { mimeType });
739
814
  this._pubSubService?.publish(`onAfterExportToExcel`, { filename, mimeType });
740
- resolve(true);
741
- });
815
+ return true;
816
+ } catch (error) {
817
+ console.error('Legacy Excel export failed:', error);
818
+ this._pubSubService?.publish('onAfterExportToExcel', { error });
819
+ return false;
820
+ }
742
821
  }
743
822
  }