我尝试过的如下:
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/