使用Exceljs包的npm来读写xlsm文件

8
我有一个包含少量数据的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');
})

注意:刚创建了带有一些值列 a,b 和值 1,2 的 Book.xlsm 文件。尝试将 A3 设置为 'c' 并保存为新的 new.xlsm。

如果还有其他没有这个问题的 npm 包也是很好的选择。


1
我遇到了类似的问题,你找到解决方法了吗? - Michael
我遇到了同样的问题。 你有找到如何解决这个问题吗? 我更喜欢这个npm包。 - Luca Migliori
1个回答

7

我认为目前的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);
}

详细信息请查看支持的输出格式


2
xlsx模块不允许您向电子表格添加图像,因此如果您同时拥有宏和图像,则无法使用该模块。 - JK.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接