UNPKG

xlsx-preview

Version:

Preview the .xlsx in the browser, convert to HTML with styles.

53 lines (50 loc) 1.66 kB
import { Workbook } from "exceljs"; import { setMinimumNumberCols, setMinimumNumberRows } from "./constants/base"; import { sheetsInAll } from "./htmls/genHtmlStructure"; import genSheet from "./htmls/genSheet"; import { XlsxData, XlsxOptions } from "./types"; export async function xlsx2Html(data: XlsxData, options?: XlsxOptions) { if (options?.minimumRows) { setMinimumNumberRows(options.minimumRows); } if (options?.minimumCols) { setMinimumNumberCols(options.minimumCols); } let buffer: ArrayBuffer; if (data instanceof Blob) { buffer = await data.arrayBuffer(); } else if (data instanceof ArrayBuffer) { buffer = data; } else { throw "xlsx2Html(data, options): The parameter data can only be passed ArrayBuffer, Blob or File type"; } const workbook = new Workbook(); await workbook.xlsx.load(buffer); const sheetsLen = workbook.worksheets.length; const sheets: string[] = []; for (let idx = 0; idx < sheetsLen; idx++) { const result = await genSheet(workbook.worksheets[idx]); sheets.push(result); } // Separate sheets. if (options?.separateSheets === true) { if (options.output === "arrayBuffer") { const all = sheets.map((sheet) => toBuffer(sheet)); return all; } return sheets; } const result = sheetsInAll(sheets, workbook.worksheets); // Output ArrayBuffer if (options?.output === "arrayBuffer") { return toBuffer(result); } return result; } function toBuffer(data: string) { const blob = new Blob([data], { type: "text/html" }); return blob.arrayBuffer(); } export default { xlsx2Html }