使用exceljs软件包npm读写xlsm文件

时间:2018-10-18 23:09:55

标签: xlsm exceljs js-xlsx openxlsx

我有一个xlsm文件,其中已包含少量数据,需要在自动化期间写入一些数据并创建一个新的xlsm文件。使用以下代码创建文件,但是该文件损坏并且无法打开。文件大小从8kb减小到7kb。不确定写入文件时会丢失什么。

var Excel = require('exceljs');
var workbook = new Excel.Workbook();

workbook.xlsx.readFile('Book.xlsm')
.then(function () {
var worksheet = workbook.getWorksheet(1);
var row = worksheet.getRow(1);
console.log(row.getCell(1).value + " - First value"); // Get A1 value
row.getCell(3).value = "c"; //Set value to A3
row.commit();
return workbook.xlsx.writeFile('new.xlsm');
})

注意:刚刚创建的Book.xlsm具有一些值列a,b和值1,2。尝试将A3设置为“ c”并另存为new.xlsm

如果还有其他没有此问题的npm软件包,那就太好了。

1 个答案:

答案 0 :(得分:0)

我认为当前exeljs不适合与xlsm文件一起使用的软件包。对于这种情况,更强大的软件包是xlsx

这是一个小代码段,它将演示如何读取现有xlsm文件,向其中添加其他数据并写入新的xlsm文件。您可以在NodeJS环境中对其进行测试。

请注意,在处理xlsm个文件时,您将bookVBA: true选项传递给readFile方法,默认情况下为false。有关详细信息,请参见parsing options

const XLSX = require('xlsx');

try {

    const workbook = XLSX.readFile('./test.xlsm', { bookVBA: true });
    let worksheet = workbook.Sheets['Sheet1'];
    XLSX.utils.sheet_add_aoa(worksheet, [
        ['text in A1', 'text in B1', 5000],
        ['text in A2', 'text in B2', 'text in C2'],
        [null, new Date(), 'text in C3', 'text in D3']
    ]);
    XLSX.writeFile(workbook, './output.xlsm');
    console.log('Completed ...');

} catch (error) {
    console.log(error.message);
    console.log(error.stack);
}

有关详细信息,请参见supported output formats