导出excel
导出excel内容简单,可以使用table,即将页面后缀名为xlsx
导出excel内容复杂,例如:设置sheet页签名,设置打印,设置样式;则需要使用第三方插件exceljs文档地址;
// 引入模块
import { Workbook } from 'exceljs';
// 创建工作薄
const wb = new Workbook();
// 添加页签,设置页签的名称
const ws = wb.addWorksheet('门贴');
// 设置打印纸张为A4纸
ws.pageSetup.paperSize = 9;
// 设置打印标题,顶端标题行,值为行号
ws.pageSetup.printTitlesRow = '1:5';
// 打印 横向
ws.pageSetup.orientation = 'landscape';
// 添加数据行分为两种格式
// 第一种
// 内容的第一行为表头
// 添加表头,默认添加到第一行
/*
* header 单元格内容
* key 关键字
* width 单元格的宽度
*/
ws.columns = [
{ header: 'Id', key: 'id' },
{ header: 'Name', key: 'name', width: 32 },
{ header: 'D.O.B.', key: 'dob', width: 10 }
];
// 添加表格数据,数据为JS对象,对象中的key需和表头中的key保持一致
ws.addRow({id: 1, name: 'John Doe', dob: new Date(1970,1,1)});
// 第二种
// 内容的第一行非表头,添加数据,行中的单元格列和数组顺序一致
ws.addRow(['考场号', '考场号', '院部', '院部', '专业', '专业']);
// 设置列的宽度,首先获取列,可以根据下标,从1开始;可以根据表头的key
const noCol = ws.getColumn(1);
noCol.width = 12;// 还可以设置其他内容
// 设置每一个单元格样式
// 可以得到每一行,row为行对象,rowNumber为行号,从1开始
ws.eachRow(function (row, rowNumber) {
// 设置行高
row.height = 25;
// 循环每一行的所有单元格,cell单元格对象,colNumber列编号,从1开始
row.eachCell(function (cell, colNumber) {
// 设置单元格的边框
cell.border = {
top: { style: 'thin' },
left: { style: 'thin' },
bottom: { style: 'thin' },
right: { style: 'thin' }
};
// 设置单元格的字体
cell.font = {
name: '微软雅黑',
family: 4,
size: 14
};
// 设置单元格内容上下居中
cell.alignment = {
vertical: 'middle'
};
});
if (rowNumber % 4 == 3) {
// 合并单元格
ws.mergeCells('B' + rowNumber + ':F' + rowNumber);
row.height = 340;
row.getCell(1).font = {
size: 20,
bold: true
}
// 添加数据验证
ws.getCell(2).dataValidation = {
allowBlank: true,
formulae: [`=dict!$B$2:$B${len}`],
type: 'list'
};
// 设置单元格的可选值,注意formulae的值格式
ws.getCell(4).dataValidation = {
type: 'list',
formulae: [`"编制内,聘用,外聘兼职"`]
};
// 设置单元格的值
ws.getCell(1).value = {
formula: `=VLOOKUP($B${row},dict!$B$2:dict!$C${len},2,0)`,
result: ''
};
// 限制单元格输入格式,例如:2018-05-03
ws.getCell(6).numFmt = 'yyyy-mm-dd';
} else {
row.height = 40;
}
});