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

如何通过Flask下载根目录中用xlsxwriter生成的XLSX文件

如何用Flask触发xlsxwriter生成的XLSX文件下载

嘿,我来帮你搞定Flask下载xlsx文件的问题!你已经用xlsxwriter生成了文件,现在只需要在Flask里添加对应的视图函数来触发下载就行,这里有两种常用方案:

方案1:先保存本地文件再下载

如果你需要保留生成的文件在服务器上,这种方法很直接:

首先导入必要的模块,然后在视图函数里先完成文件生成,再用Flask的send_from_directory返回文件:

from flask import Flask, send_from_directory
import xlsxwriter
import os

app = Flask(__name__)

@app.route('/download-excel')
def download_excel():
    # 定义文件名
    file_name = 'images.xlsx'
    
    # 生成XLSX文件(就是你原来的代码)
    workbook = xlsxwriter.Workbook(file_name)
    worksheet = workbook.add_worksheet()
    # 写入你的数据,比如:
    worksheet.write('A1', '示例数据1')
    worksheet.write('B1', '示例数据2')
    workbook.close()
    
    # 从项目根目录发送文件,as_attachment=True让浏览器触发下载
    return send_from_directory(os.getcwd(), file_name, as_attachment=True)

注意:os.getcwd()会获取当前项目的根目录,如果你把文件存在其他路径,替换成对应的路径就行。

方案2:内存中生成文件(推荐,无需保存到本地)

如果不需要在服务器上保留文件,这种方法更高效,还能避免文件覆盖、清理旧文件的麻烦:

我们用BytesIO把文件存在内存里,直接返回给浏览器:

from flask import Flask, send_file
import xlsxwriter
from io import BytesIO

app = Flask(__name__)

@app.route('/download-excel')
def download_excel():
    # 创建一个内存文件对象
    output = BytesIO()
    
    # 把workbook写入到内存对象中
    workbook = xlsxwriter.Workbook(output)
    worksheet = workbook.add_worksheet()
    # 写入你的数据
    worksheet.write('A1', '示例数据1')
    worksheet.write('B1', '示例数据2')
    
    # 一定要先关闭workbook,确保所有数据都写入内存
    workbook.close()
    
    # 重置内存文件的指针到开头,不然send_file会读不到内容
    output.seek(0)
    
    # 发送文件,设置下载文件名和正确的MIME类型
    return send_file(
        output,
        download_name='images.xlsx',
        as_attachment=True,
        mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    )

关键提示:

  • 内存方案里必须调用output.seek(0),因为写入后指针在文件末尾,重置后才能从开头读取。
  • MIME类型application/vnd.openxmlformats-officedocument.spreadsheetml.sheet是XLSX文件的标准类型,手动设置能避免浏览器识别错误。

启动Flask后,访问/download-excel就能触发文件下载啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:30:06