使用ExcelJS和NodeJS修改xlsx文件

时间:2017-02-17 04:54:58

标签: node.js exceljs

我的目标是读取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”的数据,除了已经在工作表上的数据之外还要写一行,并输出它。它不是复制文件,而是创建一个空的“output.xlsx。”

我知道我做的事情很愚蠢,而且我对nodeJS完全不熟悉。有什么想法吗?

1 个答案:

答案 0 :(得分:6)

您遇到的问题与Node.js异步性质有关。 当你致电readFile(filename1)时,它开始阅读文件。但它是一个异步(非阻塞)函数,所以此行之后的代码在读取完成之前执行。

有多种方法可以解决这个问题:回调(在异步调用完成时调用),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));




另外请确保'表1'实际存在是因为对我来说默认名称是' Sheet1'。

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