使用 ExcelJS 和 NodeJS 修改 xlsx 文件

Modifying an xlsx file with ExcelJS and NodeJS

我这里的目标是读入一个xlsx文件,添加一行,然后输出。够简单了吧?

这是我目前的代码:

var filename1="input.xlsx";
var filename2="output.xlsx";
var Excel = require('exceljs');
var workbook = new Excel.Workbook();
workbook.xlsx.readFile(filename1);
workbook.getWorksheet("Sheet 1").addRow([1,2,3]);
workbook.xlsx.writeFile(filename2);

我相信这应该读取 "input.xlsx," 中的数据,除了 sheet 上已有的数据之外再写一行,然后输出。它不是复制文件,而是创建一个空的 "output.xlsx."

我知道我在做一些愚蠢的事情,而且我对 nodeJS 完全陌生。有什么想法吗?

您遇到的问题与 Node.js 异步性质有关。 当您调用 readFile(filename1) 时,它开始读取文件。但它是一个异步 (non-blocking) 函数,因此在读取完成之前执行此行之后的代码。

有多种方法可以处理此问题:回调(在异步调用完成时调用)、promises(.then 将在调用执行时调用)、ES6 生成器和 ES7 async/await 关键字。

exceljs 使用 promises(根据文档),因此您可以执行以下操作:

'use strict';

const Excel = require('exceljs');
let filename1 = 'input.xlsx';
let filename2 = 'output.xlsx';
let workbook = new Excel.Workbook();
workbook.xlsx.readFile(filename1)
    .then(() => {
        workbook.getWorksheet('Sheet 1').addRow([1, 2, 3]);
        return workbook.xlsx.writeFile(filename2);
    }).then(() => {
        console.log('File is written');
    }).catch(err => console.error(err));

另外请确保 'Sheet 1' 确实存在,因为对我来说默认名称是 'Sheet1'.

互联网上有很多关于此主题的文章like this