// var XLSX = require("xlsx"); // import XLSX from "xlsx"; import * as XLSX from 'xlsx/xlsx.mjs'; import TemporalUtils from '../utils/temporal-utils'; import { PortalUtils } from '../utils/utils'; export class ExcelReader { static readFileAsJson(result): Array> { let inputData = result; if (result.srcBase64) { inputData = result.srcBase64; } const data = new Uint8Array(inputData); const workbook = XLSX.read(data, { cellDates: true, type: 'array', }); // So that the XLSX engine also includes first row const dummyHeader = []; for (let i = 0; i < 9999; i++) { dummyHeader.push(i); } // Transform data into some dummy JSON const firstSheet = workbook.Sheets[workbook.SheetNames[0]]; const sheetData = XLSX.utils.sheet_to_json(firstSheet, { header: dummyHeader, }); // Determine largest row index let largestIndex = 0; for (let i = 0, iLen = sheetData.length; i < iLen; i++) { const sheetRow: any = sheetData[i]; for (const key in sheetRow) { const rowIndex = Number(key); if (rowIndex > largestIndex) { largestIndex = rowIndex; } } } // Transform data from the engine into array of arrays and transform data into friendly objects const retVal = []; while (sheetData.length > 0) { const sheetRow = sheetData.shift(); const rowArr = []; retVal.push(rowArr); for (let i = 0; i <= largestIndex; i++) { let rowVal = sheetRow[i]; if (rowVal != null) { if (rowVal != null && rowVal.getUTCFullYear) { rowVal = TemporalUtils.fromDate(rowVal); } else if (PortalUtils.isString(rowVal)) { rowVal = rowVal.trim(); } } rowArr.push(rowVal); } } return retVal; } }