Skip to content

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