2017-12-26 34 views
-1

私はpython 3でフラスコのアプリケーションをビルドしています。私は出力に書き込み、ダウンロードに応答しようとしています。私がやっているのは、ダウンロードのためにクライアント側に送信しようとしているExcelファイルにsqlite3 dbの内容を書き込むことです。すべてがExcelファイルの作成までうまく動作しているようです。私はクライアントに送ることができません。FlaskのExcelファイルを返します

@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 

私は同様の質問のカップルを参照しているが、それらのどれも助けるように見えるん。どんな助けもありがとう。

注:make_responseにファイルパスを追加しようとすると、ファイルパスが文字列として取り込まれ、ファイルパスがコンテンツとして含まれた.xlsxファイルが返されます。私が間違っていることは何ですか?

このような何かが動作するはず
+0

あなたはmake_response' 'への入力として不正なオブジェクトを提供しているように思えます。サポートされているオブジェクトは[Flask.make_response](http://flask.pocoo.org/docs/0.12/api/#flask.Flask.make_response)にリストされています – JRajan

+0

@JRajan私はopenpyxl、 xwlt。それらのすべてが同じエラーを返します。私はサポートされている形式でExcelファイルを渡したいと思います。それをする方法がわからないのですか? –

+0

あなたはcsvモジュールを試しましたか? –

答えて

1

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') 
+0

Workbookのような戻りエラーにはadd_worksheetモジュールがありません。あなたはopenpyxlを使用していますか? –

+0

@Arvindkr編集を参照してください。私はあなたが 'xlsxwriter'を使っていると思っていました。 –

+0

とにかく、これはOPが間違っていた部分に答えて、HTTP応答としてファイルを正しく返します。 – jsbueno

関連する問題