使用 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。
我这里的目标是读入一个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。