Excel自动化

用 ExcelJS 填充模板生成对账单

概述

在业务系统中,经常需要根据预设的 Excel 模板填充数据生成报表。ExcelJS 是 Node.js 生态中功能完善的 Excel 操作库,支持读取模板、插入行、设置公式和单元格样式。

1. 读取模板文件

使用 readFile 加载现有 xlsx 模板,保留模板中的表头样式与合并单元格:

const ExcelJS = require('exceljs');
const workbook = new ExcelJS.Workbook();
await workbook.xlsx.readFile('template.xlsx');

2. 动态插入数据行

通过 insertRows 在指定位置插入空行,再逐行填充数据:

const startRow = 4;
worksheet.insertRows(startRow, Array(items.length).fill({}));
items.forEach((it, index) => {
  const row = worksheet.getRow(startRow + index);
  row.getCell(1).value = it.date;
  row.getCell(2).value = it.tonnage;
  // ...
});

3. 设置 Excel 公式

金额列可以使用公式让 Excel 自行计算,确保打开文件后结果准确。配合 ROUND 函数控制小数位数:

row.getCell('金额列').value = {
  formula: `ROUND(吨位单元格*单价单元格, 4)`,
  result: 预计算结果
};

4. 单元格格式与边框

明细行与合计行可以设置不同的小数显示格式。通过 numFmt 控制显示精度,通过 border 添加细边框:

// 明细:4位小数
cell.numFmt = '0.0000';
cell.border = { top: {style:'thin'}, left:{style:'thin'}, bottom:{style:'thin'}, right:{style:'thin'} };

// 合计:2位小数
summaryCell.numFmt = '0.00';

5. 输出 Buffer

生成完成后输出为 Buffer,可直接返回给前端下载或上传至云存储:

const buffer = await workbook.xlsx.writeBuffer({ useSharedStrings: true, useStyles: true });

小结

ExcelJS 的模板填充方案关键在于:保留模板原有样式、用公式保证计算准确、用 numFmt 控制显示精度。这样可以灵活应对各类报表生成需求。

← 返回文章列表