UNPKG

ze-react-component-library

Version:
102 lines (83 loc) 2.35 kB
import "antd/es/message/style"; import _message from "antd/es/message"; import { getExportFileName } from "../util"; function getFormatter(t) { var _a; var text = t; // 负数处理 if (t.startsWith('-')) { text = text.slice(1); } var unit = text.replaceAll(/[0-9.,]/g, ""); var bit = (_a = text.split(".")[1]) === null || _a === void 0 ? void 0 : _a.replace(unit, "").split("").reduce(function (p) { return p + "0"; }, ""); var z; if (bit) { z = "0." + bit; } if (text.includes(",")) { z = z ? "0," + z : "0,0"; } if (unit) { z = z ? t.startsWith(unit) ? "" + unit + z : "" + z + unit : "0" + unit; } return { z: z, unit: unit }; } function excelExporter(text, formattedText, filename, XLSX, // 外部的XLSX库 merge) { if (merge === void 0) { merge = []; } if (!XLSX) return _message.error("需要传入XLSX库才能使用导出功能"); if ((filename === null || filename === void 0 ? void 0 : filename.length) === 0) { return _message.error("导出的文件必须设定文件名"); } var formattedArr = formattedText.split("\r\n").map(function (d) { return d.split("\t").map(function (s) { return s.slice(1, -1); }); }); var arr = text.split("\r\n").map(function (d, i) { return d.split("\t").map(function (s, ii) { // 不展示的单位 var unitsToHide = ["亿", "万"]; // 去除多余的双引号 var v = s.slice(1, -1); var formattedV = formattedArr[i][ii]; var n = Number(v); if (v.trim().length === 0 || isNaN(n)) { if (v === "null") { return ""; } unitsToHide.forEach(function (u) { v = ("" + v).replace("(" + u + ")", ''); }); return v; } var _a = getFormatter(formattedV), z = _a.z, unit = _a.unit; if (unitsToHide.includes(unit)) { return { v: n, t: "n" }; } return { v: n, t: "n", z: z }; }); }); var worksheet = XLSX.utils.aoa_to_sheet(arr); worksheet["!merges"] = merge; var workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet); XLSX.writeFileXLSX(workbook, getExportFileName(filename), { compression: true }); } export default excelExporter;