@mui/x-data-grid-premium
Version:
The Premium plan edition of the MUI X Data Grid Components.
52 lines (51 loc) • 1.71 kB
JavaScript
import { addColumnGroupingHeaders, addSerializedRowToWorksheet, createValueOptionsSheetIfNeeded, getExcelJs } from "./utils.js";
export function setupExcelExportWebWorker(workerOptions = {}) {
globalThis.addEventListener('message', async event => {
const {
namespace,
serializedColumns,
serializedRows,
options,
valueOptionsSheetName,
valueOptionsData,
columnGroupDetails,
columnGroupPaths
} = event.data;
// workers share the pub-sub channel namespace. Use this property to filter out messages.
if (namespace !== 'mui-x-data-grid-export') {
return;
}
const {
exceljsPostProcess,
exceljsPreProcess
} = workerOptions;
const excelJS = await getExcelJs();
const workbook = new excelJS.Workbook();
const worksheet = workbook.addWorksheet('Sheet1');
worksheet.columns = serializedColumns;
if (exceljsPreProcess) {
await exceljsPreProcess({
workbook,
worksheet
});
}
if (options.includeColumnGroupsHeaders) {
addColumnGroupingHeaders(worksheet, serializedColumns, columnGroupPaths, columnGroupDetails);
}
const includeHeaders = options.includeHeaders ?? true;
if (includeHeaders) {
worksheet.addRow(serializedColumns.map(column => column.headerText));
}
createValueOptionsSheetIfNeeded(valueOptionsData, valueOptionsSheetName, workbook);
serializedRows.forEach(serializedRow => {
addSerializedRowToWorksheet(serializedRow, worksheet);
});
if (exceljsPostProcess) {
await exceljsPostProcess({
workbook,
worksheet
});
}
postMessage(await workbook.xlsx.writeBuffer());
});
}