代码之家  ›  专栏  ›  技术社区  ›  user433342

流式传输SheetJS-xlsx以在节点中形成数据

  •  1
  • user433342  · 技术社区  · 5 月前

    我需要在节点中生成并上传一个xlsx。在不将文件保存到磁盘的情况下,有什么方法可以做到这一点吗?

    import FormData from 'form-data';
    import XLSX from 'xlsx';
    import * as fs from 'fs';
    
    var form = new FormData();
    var data = [['a','b'],[1,2]];
    var ws = XLSX.utils.aoa_to_sheet(data);
    let wb = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
    
    //can I combine the next 2 lines somehow?
    XLSX.writeFile(wb, 'abc.xlsx', {compression:true});
    form.append('file', fs.createReadStream('abc.xlsx'));
    //...
    
    1 回复  |  直到 5 月前
        1
  •  0
  •   traynor    5 月前

    只需将工作簿作为缓冲区编写(通过传递 buffer 键入到 write ,请参阅 write output types ),然后简单地将其附加到 form-data :

    const file = XLSX.write(wb, {type: 'buffer', compression:true});
    
    form.append('file', file, {filename: 'abc.xlsx'});