Nodejs导出excel文件 及复杂样式解决方案

技术选型

采用excelJs这个库

功能解释

1. 生成表格

import excelJs from 'excelJs' 

 const workbook = new exceljs.Workbook();

 // 添加工作表
 const worksheet = workbook.addWorksheet('开票资料', {
   properties: {
     defaultRowHeight: 35 // 单位:磅(points)
   }});

这里设置的是行高,注意磅数和excel里面的不同,这里35磅大约等于excel的20不到。

2. 设置列宽

  worksheet.columns = [
      { header: '', key: 'A', width: 18},
      { header: '', key: 'B', width: 50 }, // 直接设置第三列宽度
      { header: '', key: 'C', width: 22 },
      { header: '', key: 'D', width: 20 },
      { header: '', key: 'E', width: 16 },
      { header: '', key: 'F', width: 20 },
      { header: '', key: 'G', width: 20 },
    ];

3. 合并单元格


    worksheet.mergeCells('A1:G1')

4. 设置字体

  worksheet.getCell('A2').font = {name: '华文楷体', size: 12, bold: true}
    worksheet.getCell('A2').value = "开票申请单"
    worksheet.getCell('A2').alignment = {horizontal:'center', vertical: 'middle'}

5. 表格框格线

 worksheet.getCell('D4').value = '发票类别'
    worksheet.getCell('D4').font = {name: '华文楷体', size: 12}
    worksheet.getCell('D4').border  = {top: {style: 'medium'}, bottom: {style: "thin"}, right: {style: 'thin'},  left: {style: 'medium'}}
    worksheet.getCell('D4').alignment = {vertical: 'middle', wrapText: true, horizontal:'center',}

通过设置上下左右的四条线,thin/medium/dotted 比较常用

框格线用面向对象的思路去实现,表格的每个框格都是一个对象,我们只需要关注这个对象的上下左右分别有没有框格、是加粗还是细线即可

6. 公式

    worksheet.getCell(`B${num}`).value  = {formula: 'TODAY()'}
    worksheet.getCell(`B${num}`).numFmt  =  "yyyy-mm-dd"

设置为当前日期,并且格式化,如果不加第二行代码,结果会是一个五位数,感觉很奇怪。
效果如下:

在这里插入图片描述

结果

在这里插入图片描述