在 Flask 中返回 Excel 文件 [英] Return Excel file in Flask

查看:539
本文介绍了在 Flask 中返回 Excel 文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用 python 3 构建一个 Flask 应用程序.我正在尝试写入输出并响应下载.我所做的就是将 sqlite3 db 内容写入一个 excel 文件,试图发送到客户端进行下载.在创建 excel 文件之前,一切似乎都正常.我无法发送给客户.

I am building a flask app in python 3. I am trying to write to the output and respond to download. All I am doing is write the sqlite3 db content to a excel file trying to send to the client side for download. everything seems to be working fine till creation of excel file. I am not able to send to the client.

@app.route('/download', methods=['GET'])
def export_db():
    values = execute("SELECT * from table",[])
    wb = Workbook()
    ws = wb.active

    for item in values.fetchall():
        ws.append(item)
    wb.save('example.xlsx')

    output = make_response(wb)
    output.headers["Content-Disposition"] = "attachment; filename=" + 
    "example.xlsx"
    output.headers["Content-type"] = "application/vnd.openxmlformats-
    officedocument.spreadsheetml.sheet"
    return output

我收到的错误信息是,

Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1612, 
in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1598, 
in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/user/Documents/main.py", 
line 218, in export_db
output = make_response(wb)
File "/usr/local/lib/python3.5/dist-packages/flask/helpers.py", line 
191, in make_response
return current_app.make_response(args)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1740, 
in make_response
rv = self.response_class.force_type(rv, request.environ)
File "/usr/local/lib/python3.5/dist-packages/werkzeug/wrappers.py", 
line 911, in force_type
response = BaseResponse(*_run_wsgi_app(response, environ))
File "/usr/local/lib/python3.5/dist-packages/werkzeug/wrappers.py", 
line 59, in _run_wsgi_app
return _run_wsgi_app(*args)
File "/usr/local/lib/python3.5/dist-packages/werkzeug/test.py", line 
884, in run_wsgi_app
app_rv = app(environ, start_response)
TypeError: 'Workbook' object is not callable

我提到了几个类似的问题,但似乎都没有帮助.任何帮助将不胜感激.

I have referred to couple of similar questions but none of them seem to help. Any help will be appreciated.

注意:当我尝试将文件路径添加到 make_response 时,它​​将文件路径作为字符串返回给我一个以文件路径为内容的 .xlsx 文件.知道我做错了什么吗?

Note: when I tried adding the file path to the make_response, It takes the file path as a string and returns me a .xlsx file with the file path as content. Any Idea what I am doing wrong?

推荐答案

这样的事情应该可行:

from flask import send_file
from xlsxwriter import Workbook

@app.route('/download', methods=['GET'])
def export_db():
    values = execute("SELECT * from table",[])
    wb = Workbook('path/to/workbook.xlsx')
    wb.add_worksheet('All Data')

    for item in values.fetchall():
        wb.write(item)
    wb.close()

    return send_file('path/to/workbook.xlsx')

这篇关于在 Flask 中返回 Excel 文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆