簡體   English   中英

在 Flask 應用程序中返回 Excel 文件

[英]Return Excel file in Flask app

我正在創建一個 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')

這取決於您是否要將文件保留在服務器/計算機上。 您可以執行以下操作來保留文件:

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)

如果您不想保留文件,代碼段可以為您提供幫助。

注意:根據Flask 1.1.1send_from_directory()語法已更新。 您可能還需要包含directory

https://flask.palletsprojects.com/en/1.1.x/api/#flask.send_from_directory

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM