exceljs
js
import * as ExcelJS from 'exceljs';
import { saveAs } from 'file-saver';
// 导出 Excel 文件
export function exportExcel(worksheets, filename) {
const workbook = new ExcelJS.Workbook();
worksheets.forEach((worksheetData) => {
const { name, data, merges, styles } = worksheetData;
const worksheet = workbook.addWorksheet(name);
// 设置单元格数据
worksheet.addRows(data);
// 合并单元格
if (merges && merges.length > 0) {
merges.forEach((merge) => {
worksheet.mergeCells(merge.startRow, merge.startCol, merge.endRow, merge.endCol);
});
}
// 设置单元格样式
if (styles && Object.keys(styles).length > 0) {
Object.keys(styles).forEach((cell) => {
const cellStyle = styles[cell];
worksheet.getCell(cell).style = cellStyle;
});
}
});
// 导出 Excel 文件
workbook.xlsx.writeBuffer().then((buffer) => {
const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
saveAs(blob, filename);
});
}
//测试
test() {
const worksheets = [
{
name: 'Sheet1',
data: [
['姓名', '年龄', '身高'],
['张三', 30, 155],
],
merges: [// 合并单元格信息
{ startRow: 2, startCol: 1, endRow: 2, endCol: 3 }, // 合并第2行的1、2、3列
],
styles: {// 单元格样式信息
A1: { font: { bold: true }, fill: { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFFF0000' } } }, // 设置 A1 单元格为粗体字并填充红色
},
}
];
const filename = 'output.xlsx';
exportExcel(worksheets, filename);
}