Mysql数据到Excel文件

icnyk63a  于 2022-11-18  发布在  Mysql
关注(0)|答案(2)|浏览(142)

我在nodeJs和React上工作,我在mysql存储中有数据。最终我需要让用户下载excel格式的数据。我们可以在nodeJs或React中完成。我尝试使用excel 4 node包在Node中创建一个文件,文件成功创建,但当我发送文件时,它不是excel格式(一些xml文件和文件夹),我在前端使用downloadJs触发自动下载。
第一个
这将下载一个包含xml文件列表的zip文件夹。
我试图通过从后端发送json在React(客户端)中创建,为此我使用了react-excel-workbook包,但它需要预定义的数据,当我们点击时,它突然下载了虚拟数据,它不等待异步操作解决。
任何帮助都将不胜感激。
或者我应该发送json从后端和客户端(转换成csv和触发下载。

piztneat

piztneat1#

将文件直接写入Response对象,而不是通过中间文件

var xl = require('excel4node');
var wb = new xl.Workbook();
// sends Excel file to web client requesting the / route
// server will respond with 500 error if excel workbook cannot be generated
var express = require('express');
var app = express();
app.get('/', function(req, res) {
  wb.write('ExcelFile.xlsx', res);
});
app.listen(3000, function() {
  console.log('Example app listening on port 3000!');
});
nkkqxpd9

nkkqxpd92#

回答晚了,但您应该在前端创建blob时指定内容类型,然后在DOM中创建一个链接,并向浏览器指定必须下载该文件:

axios.get(`${your backend url goes here}/path/to/export`, {
            responseType: 'blob',
            headers: {
              'Authorization': `Bearer ${token}` //Or any auth method
            }
          }).then(res => {
            const url = window.URL.createObjectURL(new Blob([res.data]), {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}); //specify CT
            const link = document.createElement('a'); // attach link to DOM
            link.href = url;
            link.setAttribute('download', 'File.xlsx');
            document.body.appendChild(link);
            link.click(); // Auto dl the file
            link.remove(); // Remove the link
          }).catch(err => {
            console.log(err);
          })

相关问题