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

如何在Flask中使用openpyxl将Excel暂存内存并发送给用户?

在Flask中从内存发送Excel文件(基于openpyxl)

当然可以!你完全不需要把Excel文件保存到服务器本地磁盘,用Python的io.BytesIO就能在内存中完成整个流程,既高效又不用事后清理临时文件。下面是修改后的完整代码,我会一步步解释核心改动:

首先,我们需要导入BytesIO——它就像一个内存中的虚拟文件,能让openpyxl直接把工作簿写入内存,而非本地磁盘:

from flask import send_file
from openpyxl import Workbook
from io import BytesIO  # 新增这个导入,用于创建内存缓冲区

@app.route('/page', methods=['GET', 'POST'])
def func():
    wb = Workbook()
    ws = wb.create_sheet()
    ws['A1'] = 'Hello World'
    
    # 创建一个内存缓冲区,代替本地文件路径
    output = BytesIO()
    
    # 将工作簿保存到内存缓冲区,而非本地文件
    wb.save(output)
    wb.close()
    
    # 关键操作:把文件指针移到缓冲区开头,否则send_file会读取到空内容
    output.seek(0)
    
    # 发送内存中的文件,同时指定正确的文件类型和下载文件名
    return send_file(
        output,
        mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        download_name='helloworld.xlsx'
    )

核心细节说明:

  • BytesIO:作为内存级别的文件容器,所有写入、读取操作都在内存中完成,不会在服务器磁盘留下任何临时文件
  • output.seek(0):向缓冲区写入内容后,文件指针会停在内容末尾,必须将其移回起始位置,这样send_file才能完整读取整个文件
  • mimetype:指定Excel文件的标准MIME类型,确保浏览器能正确识别并触发下载行为
  • download_name:设置用户下载时看到的文件名,替代原本依赖的本地文件名

这样修改后,你的Flask应用就能直接在内存中生成Excel文件,即时发送给用户浏览器,完全绕开了服务器本地文件的操作环节!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:44:46