修改现有的Excel文件,而不改变原始格式和链接

3
我正在开发一个NodeJS项目,需要修改现有的Excel电子表格而不改变原有的格式或链接,只需在几个单元格中添加值。目前我一直在使用exceljs,它非常适用于修改电子表格,但输出会删除所有原始样式、格式和链接。
是否有其他的JavaScript npm或库可以帮助我解决这个问题,或者是否可以使用exceljs来实现?
以下是目前的代码:
Fetch('url of the file')
    .then(res => res.buffer())
    .then(buffer => {
        var workbook = new Excel.Workbook();
        workbook.xlsx.load(buffer).then(function() {
            var worksheet = workbook.getWorksheet(1);
            var row = worksheet.getRow(4);
            row.getCell(2).value = 'It works!';
            row.commit();

            workbook.xlsx.write(stream)
                .then(function() {
                    // done
                    // here I take the stream and upload it to an AWS S3 bucket
                });
        });
    })

谢谢!

2个回答

4
我找到了另一个出色的 npm!它就是xlsx-populate
以下是与 exceljs 一起使用的相同代码,完成同样的工作:
Fetch('file url')
    .then(res => res.buffer())
    .then(buffer => {
        XlsxPopulate.fromDataAsync(buffer)
            .then(workbook => {
                // Make edits.
                workbook.sheet(0).cell("A1").value("foo");

                // Get the output
                return workbook.outputAsync();
            })
            .then(data => {
                // upload data to AWS S3
            })
            .catch(err => console.error(err));
    });

希望这可以帮助到正在经历同样情况的人 :)

1
谢谢@monchoz!这正是我一直在寻找的,其他npm包只是删除了所有格式,但这个保留了一切! - justd
谢谢@monchoz。真的很有效。我在使用exceljs库时遇到了奇怪的问题。 - RT Bathula

1

对于那些寻找TypeScript版本的人...

  1. 像往常一样安装XlsxPopulate
  2. 从JanLoebel的优秀工作中引入此组件的TypeScript类型(https://github.com/JanLoebel/types-xlsx-populate)
  3. 编写代码按以下方式修改现有的Excel文件:
    import { fromFileAsync } from 'xlsx-populate';
    ...
    fromFileAsync('input.xlsx').then(workbook => {
        let ws=workbook.sheet("Sheet1");
        ws.cell("C1").value("value in C1");
        ws.cell("C2").value("value in C2");
        return workbook.toFileAsync('input.xlsx');
    });


希望对某人有用。

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