Python 如何使用Flask接收excel文件作为输入,并使用openpyxl读取它?

Python 如何使用Flask接收excel文件作为输入,并使用openpyxl读取它?,python,flask,openpyxl,Python,Flask,Openpyxl,我创建了一个python脚本,从我的计算机加载一个excel文件,在使用openpyxl处理其中的信息后,保存一个新的excel文件脚本在我的计算机上运行。为了延长使用寿命,我想使用pythonanywhere或类似的工具将脚本制作成一个网站(合并flask似乎是将脚本转换成网站的最佳方式)。但是,我很难找到从用户那里接受文件的方法,因为我使用flask的经验很少。以下是我目前拥有的创建“选择文件”按钮和“流程文件”按钮的代码: app=Flask(\uuuuu name\uuuuuu) app

我创建了一个python脚本,从我的计算机加载一个excel文件,在使用openpyxl处理其中的信息后,保存一个新的excel文件脚本在我的计算机上运行。为了延长使用寿命,我想使用pythonanywhere或类似的工具将脚本制作成一个网站(合并flask似乎是将脚本转换成网站的最佳方式)。但是,我很难找到从用户那里接受文件的方法,因为我使用flask的经验很少。以下是我目前拥有的创建“选择文件”按钮和“流程文件”按钮的代码:

app=Flask(\uuuuu name\uuuuuu)
app.config[“DEBUG”]=True
@app.route(“/”,methods=[“GET”,“POST”])
def文件_summer_页面():
如果request.method==(“POST”):
输入文件=请求文件[“输入文件”]
wb\u master=加载\u工作簿(输入\u文件)
输出数据=主(wb\U主)
响应=作出响应(输出数据)
response.headers[“内容处置”]=“附件;文件名=结果.csv”
返回响应
返回“”'
加载MS Forms为您提供的自动评估:

'''

请容忍我。再说一次,我没怎么用过烧瓶,但到目前为止这是我的想法。Main(wb_master)本质上调用了我编写的脚本,以便它能够运行。此时,它返回以下错误:“AttributeError:‘SpooledTemporaryFile’对象没有属性‘seekable’。”在这种情况下,我不知道它是什么意思,但我认为这是因为我没有正确读取文件。任何帮助都将不胜感激

我猜异常来自于你的
load_工作簿
函数--你能分享你在里面的代码吗?我猜异常来自于你的
load_工作簿
函数--你能分享你在里面的代码吗?load_工作簿函数是openpyxl包附带的一个函数。当我在本地运行脚本时,它似乎工作得很好。也许您可以将Flask在请求对象上提供的文件复制到一个临时文件,然后使用
load\u工作簿
加载该文件?生产模式下的Flask处理上传文件流的方式似乎与调试/开发模式下的不同。
app = Flask(__name__)
app.config["DEBUG"] = True

@app.route("/", methods=["GET", "POST"])
def file_summer_page():
    if request.method == ("POST"):
        input_file = request.files["input_file"]
        wb_master = load_workbook(input_file)
        output_data = main(wb_master)
        response = make_response(output_data)
        response.headers["Content-Disposition"] = "attachment; filename=result.csv"
        return response

    return '''
        <html>
            <body>
                <p>Load up the automated eval that MS Forms gives you:</p>
                <form method="post" action="." enctype="multipart/form-data">
                    <p><input type="file" name="input_file" /></p>
                    <p><input type="submit" value="Process the file" /></p>
                </form>
            </body>
        </html>
    '''