导出的数据表格数量是动态的。可以是多个也可能是单个。于是想到了定义不同的sheet来放置不同的表格数据。
但是这里表格的数量不确定意味着声名的sheet变量也不确定
查了动态变量的定义
有通过eval实现
for(var i=1;i<=8;i++){
eval("var set_" + i + "=" + i);
}
但是这种占内存
一般选用的数组定义
let sheetArr = [];
for (let i = 0; i < tlength; i++) {
sheetArr[i] = 1;
}
最后导出代码这里用了我上一篇的多表格合并导出插件
原理上差不多,所以使用市面上的excel导出插件应该都可以
// 导出
getExcel() {
// 创建工作簿
let { tableList } = this;
const workbook = new ExcelJS.Workbook();
let creatName = `${this.chooseSchoolName}${this.sendData.startDate}至${this.sendData.endDate}的入籍明细表`;
workbook.creator = "入籍明细";
workbook.lastModifiedBy = "入籍明细";
workbook.created = new Date();
workbook.modified = new Date();
let tlength = tableList.length;
let sheetArr = [];
for (let i = 0; i < tlength; i++) {
sheetArr[i] = workbook.addWorksheet(tableList[i].departmentName);
// 表头
sheetArr[i].columns = [
{ header: "姓名", key: "name", width: 20 },
{ header: "证件号", key: "idCard", width: 20 },
];
let table = tableList[i].data;
let tablelength = table.length;
for (let j = 0; j < tablelength; j++) {
sheetArr[i].addRow(table[j]);
}
}
workbook.xlsx.writeBuffer().then((buffer) => {
// eslint-disable-next-line no-undef
FileSaver.saveAs(
new Blob([buffer], {
type: "application/octet-stream",
}),
`${creatName}.xlsx`
);
});
},