svelte-ux
Version:
- Increment version in `package.json` and commit as `Version bump to x.y.z` - `npm run publish`
144 lines (143 loc) • 5.62 kB
JavaScript
// import { getCellContent, getCellValue, getHeaders, getRowColumns } from './table';
// import type { ColumnDef } from '../types/table';
// import { PeriodType } from './date';
// import { saveAs } from './file';
// import { isLiteralObject } from './object';
// const fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
// const fileExtension = '.xlsx';
// export async function exportToExcel(
// data: any[],
// columns: ColumnDef[],
// fileName: string,
// limit: number | null = null
// ) {
// // console.log({
// // data,
// // columns,
// // tableHeaders: getHeaders(columns),
// // tableColumns: getColumns(columns),
// // })
// const { default: ExcelJS } = await import('exceljs');
// var workbook = new ExcelJS.Workbook();
// workbook.creator = 'svelte-ux';
// // workbook.lastModifiedBy = 'Her';
// // workbook.created = new Date(1985, 8, 30);
// // workbook.modified = new Date();
// // workbook.lastPrinted = new Date(2016, 9, 27);
// // workbook.calcProperties.fullCalcOnLoad = true;
// var worksheet = workbook.addWorksheet('Export');
// // var sheet = workbook.addWorksheet('My Sheet', {views:[{state: 'frozen', xSplit: 1, ySplit:1}]});
// // Row => Column => Number of columns spanned
// const columnPlaceholdersByRow = new Map<number, Map<number, number>>();
// const headers = getHeaders(columns);
// // Add header rows
// headers.forEach((headerRow, headerRowIndex) => {
// const rowNumber = headerRowIndex + 1; // rows are 1-based
// const row = worksheet.getRow(rowNumber);
// let columnNumber = 1; // columns are 1-based
// const columnPlaceholders = columnPlaceholdersByRow.get(rowNumber);
// const merges: {
// startRow: number;
// startColumn: number;
// endRow: number;
// endColumn: number;
// }[] = [];
// headerRow.forEach((column, columnIndex) => {
// // If current column was spanned by previous row, shift right number of spanned columns. Loop for consecutive skipped columns
// let findMoreSkipColumns = true;
// do {
// const skipColumns = columnPlaceholders?.get(columnNumber);
// if (skipColumns != null) {
// columnNumber += skipColumns;
// } else {
// findMoreSkipColumns = false;
// }
// } while (findMoreSkipColumns);
// const cell = row.getCell(columnNumber);
// cell.value = column.header ?? column.name ?? null;
// if (column.rowSpan) {
// // Add column placeholders for subsequent rows that have been spanned by this column
// for (var x = 1; x <= column.rowSpan; x++) {
// const spannedRowIndex = rowNumber + x;
// const columnPlaceholders = columnPlaceholdersByRow.get(spannedRowIndex) ?? new Map();
// columnPlaceholders.set(columnNumber, column.colSpan ?? 1); // TODO: -1?
// columnPlaceholdersByRow.set(spannedRowIndex, columnPlaceholders);
// }
// merges.push({
// startRow: rowNumber,
// startColumn: columnNumber,
// endRow: rowNumber + column.rowSpan - 1,
// endColumn: columnNumber + (column.colSpan ?? 1) - 1,
// });
// } else if (column.colSpan) {
// merges.push({
// startRow: rowNumber,
// startColumn: columnNumber,
// endRow: rowNumber,
// endColumn: columnNumber + column.colSpan - 1,
// });
// }
// columnNumber += column.colSpan ?? 1;
// });
// // Apply cell merges (rowSpan / colSpan)
// merges.forEach((merge) => {
// worksheet.mergeCells(merge.startRow, merge.startColumn, merge.endRow, merge.endColumn);
// });
// });
// if (limit !== null) {
// data = data.slice(0, limit);
// }
// // Add data rows
// data.map((rowData, rowIndex) => {
// const rowNumber = headers.length + rowIndex + 1;
// const row = worksheet.getRow(rowNumber);
// getRowColumns(columns).forEach((column, columnIndex) => {
// const columnNumber = columnIndex + 1;
// let cellValue = getCellValue(column, rowData, rowIndex);
// if (isLiteralObject(cellValue) || Array.isArray(cellValue)) {
// // If value is Object or Array, attempt to format
// cellValue = getCellContent(column, rowData, rowIndex);
// }
// const cell = row.getCell(columnNumber);
// cell.value = cellValue ?? null;
// cell.numFmt = getFormat(cellValue, column.format) ?? '';
// });
// });
// // worksheet.autoFilter = 'A1:C1'; // https://github.com/exceljs/exceljs#auto-filters
// worksheet.autoFilter = {
// from: {
// row: headers.length,
// column: 1,
// },
// to: {
// row: headers.length,
// column: worksheet.columnCount,
// },
// };
// workbook.xlsx.writeBuffer().then((data) => {
// var blob = new Blob([data], { type: fileType });
// saveAs(blob, fileName + fileExtension);
// });
// }
// /**
// * Convert column format to Excel cell format
// */
// function getFormat(value: any, format: ColumnDef['format']) {
// if (typeof format !== 'function') {
// switch (format) {
// case 'currency':
// return '$#,##0.00';
// case 'percent':
// return '0.00%';
// case 'decimal':
// return '#,##0.00';
// case 'integer':
// return '#,##0';
// default:
// // TODO: Treat each PeriodType's differently?
// if (format in PeriodType) {
// return 'm/d/yyyy\\ h:mm\\ AM/PM';
// }
// }
// }
// }