2017-12-26 4 views
-1

저는 python 3으로 플라스크 응용 프로그램을 작성하고 있습니다. 출력에 쓰고 다운로드에 응답하려고합니다. 내가하고있는 일은 다운로드를 위해 클라이언트 측에 보내려고하는 엑셀 파일에 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

것 같다. 지원되는 객체는 [Flask.make_response] (http://flask.pocoo.org/docs/0.12/api/#flask.Flask.make_response)에 나열되어 있습니다. – JRajan

+0

@JRajan 나는 openpyxl과 같은 몇 가지 모듈을 사용해 보았습니다. xwlt. 모두 동일한 오류를 반환합니다. 지원되는 형식으로 Excel 파일을 전달하고 싶습니다. 어떻게해야할지 모르십니까? –

+0

CSV 모듈을 사용해 보셨습니까? –

답변

1

뭔가 작동합니다 : 당신이 make_response``에 대한 입력으로 잘못된 개체를 제공하는 것처럼

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

통합 문서와 같은 반환 오류에는 add_worksheet 모듈이 없습니다. openpyxl을 사용하고 있습니까? –

+0

@Arvindkr 제 편집을 참조하십시오. 나는 당신이'xlsxwriter'를 사용하고 있다고 가정했다. –

+0

어쨌든, 이것은 OP가 잘못 처리 한 부분에 대한 대답이며 파일을 HTTP 응답으로 올바르게 반환합니다. – jsbueno

관련 문제