首页 > 解决方案 > 如何强制将python输出保存为excel文件?

问题描述

我有一个在服务器上运行的 python 脚本。结果,它使用 openpyxl 库创建了一个 excel 工作簿,我在服务器磁盘上的 tempfile 中的 tempfile 库的帮助下将它写在磁盘上。但此时,我想让客户端的浏览器也下载工作簿。我应该怎么办?

这是我的代码:

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        file = request.files['file']
        if file:# and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            output = gen_file(file)
            #gen_file makes a new excel workbook from the uploaded file
            return output
    return '''
    <!doctype html>
    <title>Upload new File</title>
    <h1>Upload new File</h1>
    <form action="" method=post enctype=multipart/form-data>
      <p><input type=file name=file>
         <input type=submit value=Upload>
    </form>
    '''

这是我的 gen_file 函数的最后一部分

    with NamedTemporaryFile(suffix=".xlsx",dir=".",delete=False) as tmp:
        output_workbook.save(tmp)
        return tmp.name

标签: pythonexcel

解决方案


如果您使用的是烧瓶,您的选择是直接从您的烧瓶应用程序提供文件,或者使用负载均衡器nginx,并将您的文件放在nginx的公共目录中。

对于第一个选项,您可以使用以下内容:

from flask import Response

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        file = request.files['file']
        if file:# and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            output = gen_file(file)
            #gen_file makes a new excel workbook from the uploaded file
            file_content = open(output, 'r').read()
            return Response(
                file_content,
                mimetype="text",
                headers={"Content-disposition":
                    f"attachment; filename=anything.csv"})

<file_content>可以是任何东西。您可以使用 python 的内置函数读取文件内容,例如open.


推荐阅读