如何使用NodeJS将2个XLSX文件合并成一个

4

我目前正在使用NodeJS生成XLSX电子表格。我使用xlsx-populate模块在Express服务器上创建单个工作表的XLSX文件。

我想知道是否有人知道如何使用Node将多个XLSX文件合并为一个文件,其中包含多个工作表。

谢谢!

示例:

const xlsx = require('xlsx-populate');

xlsx.fromFileAsync('template1.xlsx')
  .then((workbook) => {
    // populate the workbook with stuff

    return workbook.toFileAsync('spreadsheet1.xlsx');
  })
  .then(() => xlsx.fromFileAsync('template2.xlsx'))
  .then((workbook) => {
    // populate the other workbook with stuff

    return workbook.toFileAsync('spreadsheet2.xlsx');
  });

这个Promise链保存了两个不同的XLSX文件(spreadsheet1.xlsx,spreadsheet2.xlsx),每个文件都是从相应的模板文件构建而成。xlsx-populate不允许你在同一个工作簿中从不同的XLSX文件创建多个表格,所以我想知道是否可能将这两个工作簿合并成一个带有多个表格的文件?
编辑:
最终我换了一个更加灵活但也更加复杂的excel4node模块。我的问题是我有两个包含图片的模板文件,我想用xlsx-populate将它们合并成一个文件。
由于我没有找到一种成功的方法来使用xlsx-populate将这两个模板合并到一个文件中,所以我使用excel4node从头开始重建模板文件,并插入图片(xlsx-populate不支持)。

请在您的尝试中包含任何相关代码和参考链接。 - user320487
你尝试过创建两个节点读取流并将它们导入单个写入流吗? - cheesenthusiast
@cheesenthusiast 请查看编辑,希望更清晰。 - DCtheTall
2个回答

4

这段代码可以将两个Excel文件合并成一个新文件。

 const XlsxPopulate = require('xlsx-populate');

 Promise.all([
    XlsxPopulate.fromFileAsync('./src/data/template.xlsx'),
    XlsxPopulate.fromFileAsync('./src/data/template2.xlsx')
 ])
  .then(workbooks => {
    const workbook = workbooks[0];
    const workbook2 = workbooks[1];
    const sheets2 = workbook2.sheets();

    sheets2.forEach(sheet => {
      const newSheet = workbook.addSheet(sheet.name());
      const usedRange = sheet.usedRange();
      const oldValues = usedRange.value();

      newSheet.range(usedRange.address()).value(oldValues);
    });

    return workbook.toFileAsync('./src/data/xlsx-populate/spreadsheet2.xlsx');
 });

已知问题:

由于复制样式功能正在开发中,它会丢失第二个的样式,请参考此处


0

往工作簿中添加新的工作表

此示例使用 XLSX.utils.aoa_to_sheet 创建一个工作表,并将新的工作表附加到工作簿中:

var new_ws_name = "SheetJS";

/* make worksheet */
var ws_data = [
    [ "S", "h", "e", "e", "t", "J", "S" ],
    [  1 ,  2 ,  3 ,  4 ,  5 ]
];
var ws = XLSX.utils.aoa_to_sheet(ws_data);

/* Add the sheet name to the list */
wb.SheetNames.push(ws_name);

/* Load the worksheet object */
wb.Sheets[ws_name] = ws;

来源:https://www.npmjs.com/package/xlsx#streaming-read


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