You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask服务中实现Pandas DataFrame转内存Excel供前端下载的方案问询

后端Flask接口修改

依赖准备

首先安装Excel文件生成依赖:
pip install openpyxl

接口代码调整

pandas的to_excel方法需要写入文件或类文件对象,因此我们用内存字节缓冲区BytesIO承接生成的Excel内容,不需要写入磁盘即可返回:

import pandas as pd
from io import BytesIO
from flask import Response

# 原有业务逻辑生成raw_results
df_results = pd.DataFrame(raw_results)
# 初始化内存字节缓冲区
output = BytesIO()
# 将DataFrame写入缓冲区,index=False表示不导出索引列,可按需调整参数
df_results.to_excel(output, engine="openpyxl", index=False)
# 把缓冲区指针移动到起始位置,否则读取到的内容为空
output.seek(0)
# 构造响应,设置Excel对应的MIME类型
return Response(
    output,
    mimetype="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
    status=200
)
前端请求逻辑修改

Excel是二进制文件,不能用之前处理文本CSV的逻辑,需要先按二进制格式接收响应:

// 示例为fetch请求,axios等请求库逻辑同理
fetch('/你的接口地址', {
  method: 'GET' // 保持和你原有请求方式一致
})
.then(response => response.blob())
.then(blob => {
  const element = document.createElement('a');
  // 基于二进制blob生成临时访问链接
  const fileUrl = URL.createObjectURL(blob);
  element.setAttribute('href', fileUrl);
  element.setAttribute('download', filename + ".xlsx");
  element.style.display = 'none';
  document.body.appendChild(element);
  element.click();
  document.body.removeChild(element);
  // 释放临时链接占用的内存,避免内存泄漏
  URL.revokeObjectURL(fileUrl);
})

如果使用axios发送请求,需要在请求配置中添加responseType: 'blob',后续处理逻辑和上述一致。

内容的提问来源于stack exchange,提问作者ralvarez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:24:00