UNPKG

@mui/x-data-grid-premium

Version:

The Premium plan edition of the MUI X Data Grid Components.

52 lines (51 loc) 1.71 kB
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()); }); }