设置导出的表格样式,xlsx-js-style!真的绝绝子!
1.下载xlsx-js-style依赖
npm install xlsx-js-style
2.在main.js中挂载到vue原型上,方便使用
import XLSX from 'xlsx-js-style'
Vue.prototype.$xlsx = XLSX
3.页面具体写法
exportExcel() {
const th = [
[
"序号",
"工号",
"姓名",
"备注",
],
];
let newData = [];
this.listData.map((item, index) => {
newData.push([
index + 1,
item.jobNumber,
item.name,
item.remark
]);
});
let excelData = th.concat(newData); //数组的拼接
let workbook = this.$xlsx.utils.book_new(); // 工作簿
let worksheet = this.$xlsx.utils.aoa_to_sheet(excelData); // 数据表
//以下是样式设置,样式设置放在组织完数据之后,xlsx-js-style的核心API就是SheetJS的
//样式的设置可以参考相关文档 贴在文章末尾第二个链接
//修改列宽cols 行宽就用rows 总共11列
worksheet["!cols"] = [
{
width: 14,
},
{
width: 14,
},
{
width: 14,
},
{
width: 20,
}
];
// 修改行高 这里我只修改了第一行
worksheet["!rows"] = new Array(this.listData.length + 1).fill({
hpx: 24,
});
//合并第一行单元格 s和e指范围即第一行 第一列到第十一列
// worksheet["!merges"] = [{ s: { r: 0, c: 0 }, e: { r: 0, c: 10 } }];
Object.keys(worksheet).forEach((key) => {
// 非!开头的属性都是单元格
// excelData.length是我表格的长度也就是总行数
//设置从第二行开始的数据样式
for (let i = 1; i <= excelData.length; i++) {
//用正则表达式判断是否是某一行
if (key.replace(/[^0-9]/gi, "") == i) {
worksheet[key].s = {
//设置字体
font: {
name: "Arial",
sz: 12,
bold: false,
color: { rgb: "000000" },
},
//设置居中
alignment: {
horizontal: "center",
vertical: "center",
wrapText: true,
},
//设置边框
border: {
top: { style: "thin" },
right: { style: "thin" },
bottom: { style: "thin" },
left: { style: "thin" },
},
};
}
}
});
this.$xlsx.utils.book_append_sheet(workbook, worksheet, "Sheet1");
this.$xlsx.writeFile(workbook, "a.xlsx"); //表格名称
},
参考:前端根据后端返回数据导出指定样式的表格(xlsx-js-style)_前端excel导出指定格式-CSDN博客