簡體   English   中英

如何允許用戶使用 python/Flask 下載 excel 文件?

[英]How to allow users to download an excel file using python/Flask?

我有一個方法可以接收一個 excel 文件,讀取 excel 文件,從中提取數據並保存。 我現在遇到的問題是如何編寫一個返回 excel 文件並允許用戶從前端下載它的方法。

這是主文件

    class UploadFileForm(FlaskForm):
        file = FileField('File', validators=[InputRequired()])
        submit = SubmitField('Download File') 
    
    @app.route('/', methods=['GET', 'POST'])
    def home_api():
    
        form = UploadFileForm()
        if form.validate_on_submit():
    
            file = form.file.data
            file.save(os.path.join(os.path.abspath(os.path.dirname(_file_)),app.config['UPLOAD_FOLDER'],secure_filename(file.filename)))
            process_xl(os.path.join(os.path.abspath(os.path.dirname(_file_)),app.config['UPLOAD_FOLDER'],secure_filename(file.filename)))
            download_file(os.path.join(os.path.abspath(os.path.dirname(_file_)),app.config['UPLOAD_FOLDER'],secure_filename(file.filename)))
    
            return 'File has been uploaded'
        return render_template('index.html', form=form)

This is the service that does the extraction and little manipulation.

from flask import send_file
import requests
from openpyxl import load_workbook


def weather(city):

    url = "https://community-open-weather-map.p.rapidapi.com/weather"
    querystring = {"q":f"{city}","lat":"0","lon":"0","callback":"test","id":"2172797","lang":"null","units":"imperial","mode":"HTML"}

    headers = {
        "X-RapidAPI-Key": "0a109dce92msh070cc32fb93c003p1e4e8djsnef8cf195fed1",
        "X-RapidAPI-Host": "community-open-weather-map.p.rapidapi.com"
    }

    response = requests.request("GET", url, headers=headers, params=querystring)

    return response.text

def process_xl(filename):

    wb = load_workbook(filename=filename)

    sheet_1 = wb['Sheet1']
    sheet_2 = wb['Sheet2']

    city_1 = sheet_1['A1'].value
    city_2 = sheet_2['']

根據要求,我需要一個函數來返回我可以在 main 方法中調用的 excel 文件。 我已經嘗試返回它不起作用的 excel 文件

您只需要創建一個將文件發送到客戶端的路由

這里是如何

import os
from flask import send_file
@app.route('/downlaod')
def downloadExcel():
    root_path = "path_to_your_file"
    filename = "your_file_name.xlsx"
    file_path = os.path.join(root_path, filename)
    return send_file(file_path)

您的功能應該保存文件。

def process_xl(filename):

    wb = load_workbook(filename=filename)

    sheet_1 = wb['Sheet1']
    sheet_2 = wb['Sheet2']

    city_1 = sheet_1['A1'].value
    city_2 = sheet_2['']
    wb.save(filename)

這條線解決了我的問題

return send_from_directory('directory-path', file.filename)

這是這里的完整代碼

from flask import send_from_directory class UploadFileForm(FlaskForm): file = FileField('File', validators=[InputRequired()]) submit = SubmitField('Download File')

@app.route('/', methods=['GET', 'POST']) def home_api():

form = UploadFileForm()
if form.validate_on_submit():

    file = form.file.data
    file.save(os.path.join(os.path.abspath(os.path.dirname(_file_)),app.config['UPLOAD_FOLDER'],secure_filename(file.filename)))
    process_xl(os.path.join(os.path.abspath(os.path.dirname(_file_)),app.config['UPLOAD_FOLDER'],secure_filename(file.filename)))
    download_file(os.path.join(os.path.abspath(os.path.dirname(_file_)),app.config['UPLOAD_FOLDER'],secure_filename(file.filename)))

    return send_from_directory('directory-path', file.filename)
return render_template('index.html', form=form)

暫無
暫無

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

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