@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 +3 -11
- package/dist/excelExport.service.d.ts +20 -9
- package/dist/excelExport.service.d.ts.map +1 -1
- package/dist/excelExport.service.js +170 -109
- package/dist/excelExport.service.js.map +1 -1
- package/package.json +4 -4
- package/src/excelExport.service.ts +196 -117
package/README.md
CHANGED
|
@@ -5,22 +5,14 @@
|
|
|
5
5
|
[](https://www.npmjs.com/package/@slickgrid-universal/excel-export)
|
|
6
6
|
[](https://bundlephobia.com/result?p=@slickgrid-universal/excel-export)
|
|
7
7
|
|
|
8
|
-
[](https://github.com/ghiscoding/slickgrid-universal/actions)
|
|
9
|
-
[](https://www.cypress.io/)
|
|
10
|
-
[](https://vitest.dev/)
|
|
11
|
-
[](https://codecov.io/gh/ghiscoding/slickgrid-universal)
|
|
12
|
-
|
|
13
8
|
## Excel Export Service
|
|
14
|
-
####
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
-
*
|
|
56
|
-
*
|
|
54
|
+
* Notes:
|
|
55
|
+
* - Column order must match the grid.
|
|
56
|
+
* - For large datasets, processing yields periodically to keep the UI responsive.
|
|
57
57
|
*
|
|
58
|
-
*
|
|
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
|
-
|
|
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
|
|
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
|
-
/**
|
|
116
|
-
protected
|
|
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":"AAAA,OAAO,KAAK,EACV,kBAAkB,IAAI,sBAAsB,EAC5C,MAAM,EACN,gBAAgB,EAChB,iBAAiB,EAEjB,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,UAAU,EACV,YAAY,EACZ,MAAM,EACN,aAAa,EACb,aAAa,EACb,SAAS,EACT,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAIL,QAAQ,EAIT,MAAM,6BAA6B,CAAC;AAUrC,OAAO,EAGL,QAAQ,EACR,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAiF,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AASrI,qBAAa,kBAAmB,YAAW,gBAAgB,EAAE,sBAAsB;IACjF,SAAS,CAAC,WAAW,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAiB;IACjE,SAAS,CAAC,KAAK,EAAG,SAAS,CAAC;IAC5B,SAAS,CAAC,QAAQ,EAAG,MAAM,CAAC;IAC5B,SAAS,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACtD,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC,CAAM;IACnD,SAAS,CAAC,wBAAwB,UAAS;IAC3C,SAAS,CAAC,gBAAgB,UAAS;IACnC,SAAS,CAAC,mBAAmB,EAAG,iBAAiB,CAAC;IAClD,SAAS,CAAC,MAAM,EAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,WAAW,EAAG,UAAU,CAAC;IACnC,SAAS,CAAC,kBAAkB,EAAE,GAAG,CAAC;IAClC,SAAS,CAAC,cAAc,EAAE,aAAa,GAAG,IAAI,CAAQ;IACtD,SAAS,CAAC,kBAAkB,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC5D,SAAS,CAAC,SAAS,EAAG,QAAQ,CAAC;IAG/B,SAAS,CAAC,wBAAwB,EAAE;QAClC,CAAC,OAAO,EAAE,MAAM,GAAG;YAAE,aAAa,CAAC,EAAE,MAAM,CAAC;YAAC,kBAAkB,EAAE,oBAAoB,CAAA;SAAE,CAAC;KACzF,CAAM;IACP,SAAS,CAAC,uBAAuB,EAAE;QACjC,CAAC,OAAO,EAAE,MAAM,GAAG;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,cAAc,CAAC;YAAC,mBAAmB,CAAC,EAAE,0BAA0B,CAAA;SAAE,CAAC;KAC1H,CAAM;IAEP,8GAA8G;IAC9G,QAAQ,CAAC,SAAS,wBAAwB;IAE1C,SAAS,KAAK,kBAAkB,IAAI,MAAM,CAEzC;IAED,0CAA0C;IAC1C,IAAI,SAAS,IAAI,aAAa,CAE7B;IAED,iEAAiE;IACjE,SAAS,KAAK,YAAY,IAAI,UAAU,CAEvC;IAED,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,iBAAiB,IAAI,GAAG,CAE3B;IAED,IAAI,sBAAsB,IAAI,GAAG,CAEhC;IAED,IAAI,uBAAuB,IAAI,GAAG,CAEjC;IAED,OAAO,IAAI,IAAI;IAIf;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,GAAG,IAAI;IAe/D
|
|
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
|
-
*
|
|
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
|
-
*
|
|
72
|
-
*
|
|
70
|
+
* Notes:
|
|
71
|
+
* - Column order must match the grid.
|
|
72
|
+
* - For large datasets, processing yields periodically to keep the UI responsive.
|
|
73
73
|
*
|
|
74
|
-
*
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
150
|
-
// fallback to legacy export
|
|
151
|
-
this.
|
|
143
|
+
catch (err) {
|
|
144
|
+
// fallback to legacy export if streaming is not supported
|
|
145
|
+
return await this.legacyExcelExportAsync(filename, mimeType);
|
|
152
146
|
}
|
|
153
|
-
}
|
|
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
|
-
|
|
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 &&
|
|
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.
|
|
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 (
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
301
|
-
|
|
302
|
-
|
|
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
|
-
|
|
351
|
-
const
|
|
352
|
-
|
|
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 =
|
|
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
|
-
//
|
|
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
|
|
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
|
-
/**
|
|
595
|
-
|
|
596
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
35
|
-
"@slickgrid-universal/utils": "9.
|
|
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": "
|
|
42
|
+
"gitHead": "2f8344e34f8c8409895ab1827036f8c5701acd63"
|
|
43
43
|
}
|
|
@@ -133,107 +133,110 @@ export class ExcelExportService implements ExternalResource, BaseExcelExportServ
|
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
/**
|
|
136
|
-
*
|
|
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
|
-
*
|
|
140
|
-
*
|
|
138
|
+
* Notes:
|
|
139
|
+
* - Column order must match the grid.
|
|
140
|
+
* - For large datasets, processing yields periodically to keep the UI responsive.
|
|
141
141
|
*
|
|
142
|
-
*
|
|
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
|
-
|
|
186
|
-
|
|
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
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
finalOutput = this._sheet.data.concat(dataOutput);
|
|
192
|
-
}
|
|
158
|
+
// reset references of detected Excel formats
|
|
159
|
+
this._regularCellExcelFormats = {};
|
|
160
|
+
this._groupTotalExcelFormats = {};
|
|
193
161
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
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
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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
|
-
|
|
232
|
-
|
|
233
|
-
|
|
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
|
-
}
|
|
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
|
-
|
|
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 (
|
|
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.
|
|
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 (
|
|
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
|
|
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
|
|
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
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
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
|
|
477
|
+
protected async pushAllGridRowDataToArrayAsync(
|
|
462
478
|
originalDaraArray: Array<Array<string | ExcelColumnMetadata | number>>,
|
|
463
479
|
columns: Column[]
|
|
464
|
-
): Array<Array<string | ExcelColumnMetadata | number
|
|
465
|
-
const
|
|
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
|
-
//
|
|
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 =
|
|
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
|
-
//
|
|
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
|
|
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
|
-
/**
|
|
737
|
-
protected
|
|
738
|
-
|
|
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
|
-
|
|
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
|
}
|