在Flask应用中返回Excel文件

Har*_*son 2 python 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')
Run Code Online (Sandbox Code Playgroud)

Ami*_*aee 5

这取决于您是否要将文件保留在服务器/计算机上。您可以执行以下操作来保留文件:

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)
Run Code Online (Sandbox Code Playgroud)

而且,如果您不想保留文件,代码段也可以为您提供帮助。

  • 我已经尝试过使用 python xlswriter 而不是这个包的 StringIO。在这种情况下,我创建了一个实例 ouput = StringIO() 然后使用该实例创建了我的工作簿 wb = WorkBook(output) 然后将数据写入 wb。 (2认同)
  • 该片段的链接似乎已损坏。您是否记得有关它的详细信息,以便我们可以搜索/找到它? (2认同)