Estoy intentando crear y enviar un archivo de Excel al cliente. El cliente debe descargar el archivo a través de una solicitud ajax, porque necesito parámetros de filtro.
Estoy usando el paquete excel4node para crear un archivo de Excel.
Escribo el código a continuación y está funcionando por ahora, pero sospecho si tendré datos más grandes que el búfer. ¿Es esta la forma correcta de usar el búfer? (verifique la línea con el método writeToBuffer)
const xl = require('excel4node'); const excelCreator = function (data) {...} app.post('/api/excel', jsonParser, (req, res) => { let reqObj = { method: 'post', url: apiUrl + '/MemberService';, headers: { 'Content-Type': 'application/json' }, data: req.body }; axios(reqObj) .then(response => { res.body = responseHandler(response); // a helper function to set res object let data = res.body.Data; res.setHeader('Content-Disposition', 'attachment; filename=' + 'excel.xlsx'); res.type('application/octet-stream'); res.body.Data = null; excelCreator(data).writeToBuffer().then(function (buffer) { res.body.Data = buffer; res.send(res.body); }); }) .catch(...); });Primero instale SheetJS js-xlsx
npm --save install xlsxEntonces puedes enviar esta respuesta con Express:
const xlsx = require('xlsx') var wb = xlsx.utils.book_new(); var table = [['a', 'b', 'c'], ['1', '2', '3']] var ws = xlsx.utils.aoa_to_sheet(table); xlsx.utils.book_append_sheet(wb, ws, 'test'); // write options const wopts = { bookType: 'xlsx', bookSST: false, type: 'base64' }; const buffer = xlsx.write(wb, wopts); res.writeHead(200, [['Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']]); res.end(new Buffer(buffer, 'base64'));No dude en consultar los documentos https://www.npmjs.com/package/xlsx
Package used: npm install xlsx --save import * as XLSX from 'xlsx'; var json =[ { 'Fullname' : "Ram Shrestha", 'Date Of Birth':"1996-06-01", 'Gender': "Male", 'Salary':"80000", 'Designation':"Senior" }, { 'Fullname' : "Ramesh Shrestha", 'Date Of Birth':"1997-06-01", 'Gender': "Male", 'Salary':"90000", 'Designation':"Senior" } ]; const fileName = "Sample"; const workBook: XLSX.WorkBook = XLSX.utils.book_new(); const workSheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json); XLSX.utils.book_append_sheet(workBook, workSheet, `${excelFileName}`) const buffer = XLSX.write(workBook, { bookType: 'xlsx', bookSST: false, type: 'base64' }); res.writeHead(200, [ ['Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'], ["Content-Disposition", "attachment; filename=" + `${fileName}.xlsx`] ]); res.end(Buffer.from(buffer, 'base64'));espero que funcione .