javascript - 如何在 Node js 中写入 xls 文件和流以响应

标签 javascript node.js excel xlsx nodejs-stream

我尝试过的如下:

exports.downloadListOfUsers = (req, res) => {
    let users = [{id:'',name:'',lastName:'',gender:''},{...},{...}]
    const XLSX = require('xlsx');
    let ws = XLSX.utils.aoa_to_sheet(users); //XLSZ.utils.json_to_sheet(users)
    let wb = XLSX.utils.book_new();
    let wbout = XLSX.write(wb, {bookType: 'xlsx', type: 'binary'});
    wbout.pipe(res)
}

将其发送给客户端后,响应状态为待处理,一段时间后它会失败。我不知道我错过了什么。请指导我。谢谢。

最佳答案

这个想法是创建一个有效的 Excel 文件,然后流式传输它。

观察创建 Workbook 并将 JSON 数据写入其中的调用顺序。如果要处理多个客户端请求并创建发送数据的历史记录/日志,您可能希望为不同的 Excel 文件创建唯一名称。

这是一个完整的工作示例(请参阅内联注释):

const fs = require('fs');
const server = require('http').createServer();
const XLSX = require('xlsx');

server.on('request', (req, res) => {
    const data = [
        {id: '1', name: 'abc'},
        {id: '2', name: 'xyz'}
    ];

    const wb = XLSX.utils.book_new();                     // create workbook
    const ws = XLSX.utils.json_to_sheet(data);            // convert data to sheet
    XLSX.utils.book_append_sheet(wb, ws, 'users_sheet');  // add sheet to workbook

    const filename = "users.xlsx";
    const wb_opts = {bookType: 'xlsx', type: 'binary'};   // workbook options
    XLSX.writeFile(wb, filename, wb_opts);                // write workbook file

    const stream = fs.createReadStream(filename);         // create read stream
    stream.pipe(res);                                     // send to client
});

server.listen(8080);

关于javascript - 如何在 Node js 中写入 xls 文件和流以响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61013208/

相关文章:

javascript - 用于选择 HTML <option> 的 Jquery 方法

javascript - 使用 cloudformation 将完整的网站部署到 AWS

javascript - Bootstrap 模态元素偏移量为零

javascript - 每个 promise node.js/js 上的更多 promise

windows - 如何关闭从 Excel-VBA 脚本调用的 .exe 的错误消息?

javascript - 将图像标题区域与图像对齐

javascript - Axios url get html响应请求为200,但response.data为空

excel - 保存文件时的 XLSX 语言环境

excel - 查找公式以减去最后一个输入数据点

javascript - NodeJS Promises 无法编辑现有的 'model'