| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import * as XLSX from "xlsx-js-style";
- /**
- * 导出Excel表格
- * @param header 生成excel的表头 []
- * @param data 生成excel的内容 []
- * @param merges 生成excel的合并单元格
- * @param name 生成excel的文件名,如:abc.xlsx
- * */
- export const exportExcel = (header, data, merges, name) => {
- const workbook = XLSX.utils.book_new(); // 创建一个工作表
- const worksheet = XLSX.utils.aoa_to_sheet([header, ...data]);// 将工作表添加到工作簿
- // 设置worksheet每列的最大宽度
- const colWidth = data.map(d => d.map(val => {
- let wch = 10;
- // 是否为中文
- if (val) wch = val.toString().split("").map(str => str.charCodeAt() > 255 && 2 || 1).reduce((p, v) => p + v);
- return { wch };
- }));
- // 以第一行为初始值
- let result = colWidth[0];
- for (let i = 1; i < colWidth.length; i++) {
- for (let j = 0; j < colWidth[i].length; j++) {
- if (result[j]["wch"] < colWidth[i][j]["wch"]) result[j]["wch"] = colWidth[i][j]["wch"];
- }
- }
- header.forEach((val, i) => {
- if (result[i]["wch"] < val.length * 2) result[i]["wch"] = val.length * 2;
- });
- worksheet["!cols"] = result;
- // 合并单元格
- worksheet["!merges"] = merges;
- // 设置居中
- for (let i in worksheet) {
- if (worksheet[i].v) worksheet[i].s = { alignment: { horizontal: "center", wrapText: true, vertical: "center" } };
- }
- XLSX.utils.book_append_sheet(workbook, worksheet); // 生成Excel文件
- XLSX.writeFile(workbook, name);
- }
|