飞道科技

飞道科技文档总汇

导出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;
	}
});