2016-07-19 4 views
0

사용자에게 Excel 파일을 묻는 Flask 응용 프로그램을 만들고 일부 프로그램에서 작업 한 다음 파일을 다시 다운로드하여 사용자가 다운로드 할 수 있도록합니다. (사용하지 않은 수입은 무시하십시오. 나중에 사용하실 계획입니다.)Flask 응용 프로그램에서 Excel 파일을 반환하십시오.

내 기능이 저하되었지만, 파일을 다운로드 할 수 있도록 사용자에게 다시 보내는 방법을 모르겠습니다. 어떤 도움을 주셔서 미리 감사드립니다! 여기

는 지금까지이 작업은 다음과 같습니다 (참고 : 내가 제대로 업로드 기능 구현하면 너무 확실하지 않다) 그것은 당신이 당신의 서버/컴퓨터 또는에서 파일을 유지하려면 따라

from openpyxl import load_workbook 
from flask import Flask, request, render_template, redirect, url_for 


app = Flask(__name__) 

@app.route('/') 
def index(): 
    return """<title>Upload new File</title> 
    <h1>Upload new File</h1> 
    <form action="/uploader" method=post enctype=multipart/form-data> 
     <p><input type=file name=file> 
     <input type=submit value=Upload> 
    </form>""" 

@app.route('/uploader', methods = ['GET', 'POST']) 
def upload(): 
    if request.method == 'POST': 
     f = request.files['file'] 
     f.save(f.filename) 
     return process(f.filename) 

def process(filename): 

    routename = ['ZYAA', 'ZYBB', 'ZYCC'] 
    supervisors = ['X', 'Y', 'Z'] 
    workbook = load_workbook(filename) 
    worksheet = workbook.active 
    worksheet.column_dimensions.group('A', 'B', hidden=True) 
    routes = worksheet.columns[2] 
    i = 2 
    worksheet['D1'] = 'Supervisor' 
    for route in routes: 
     if route.value in routename: 
      pos = routes.index(route) 
      worksheet['D' + str(i)].value = supervisors[pos] 
      print (route.value) 
      i += 1 

    workbook.save(filename) 




if __name__ == '__main__': 
    app.run(debug = True, host = '0.0.0.0') 

답변

1

을 아니.

from flask import send_from_directory 

def process(): 
    # do what you're doing 

    file_name = 'document_template.xltx' 
    wb = load_workbook('document.xlsx') 
    wb.save(file_name, as_template=True) 

    return send_from_directory(file_name, as_attachment=True) 

을 그리고 당신은 파일을 보관하지 않으려면, this 조각은 당신을 도울 수 있습니다 : 당신은 파일을 유지하기 위해 같은 것을 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 내가 일할 때 나는 그들을 시험 할 것이다. 내 업로드 기능이 파일을 프로세스 기능에 제대로 전달한다는 의미에서 정확합니까? – Harrison

+0

그게 효과가있을 것 같아요. –

+0

stringIO 방식으로하는 방법을 잘 모르겠습니다. excel 파일을 stringIO 객체에 쓰려면 어떻게해야합니까? 나는 현재 이것을하고있다 : return send_file (filename, attachment_filename = 'output.xls', as_attachment = True) – Harrison

관련 문제