如何使用openpyxl读取API请求中来自Angular的Excel文件?
如何用openpyxl读取API请求中的FileStorage类型Excel文件
直接通过两种方式可以解决问题,以下是具体代码和错误原因说明:
可行方案
方案1:直接使用FileStorage对象的stream属性
Flask的FileStorage对象本身就是类文件对象,直接传入load_workbook即可,注意先将文件指针重置到起始位置:
from flask import request import openpyxl if 'sfile' in request.files: sfile = request.files['sfile'] sfile.seek(0) # 确保读取从文件开头开始 workbook = openpyxl.load_workbook(sfile)
方案2:用BytesIO包装文件字节数据
如果需要先处理字节数据,可将读取到的字节包装为BytesIO类文件对象后传入:
from flask import request import openpyxl import io if 'sfile' in request.files: file_data = request.files['sfile'].read() file_stream = io.BytesIO(file_data) workbook = openpyxl.load_workbook(file_stream)
之前的错误原因
- 用
open(sub_odk)报错:open函数需要文件路径,你传入的是字节数据,且默认文本模式会尝试用UTF-8解码二进制Excel文件,导致解码失败。 - 第一次用
BytesIO仍报错:大概率是openpyxl版本过低,升级到最新稳定版即可解决(执行pip install --upgrade openpyxl)。 - 直接传字节给
load_workbook报错:该函数不支持原始字节作为参数,仅接受文件路径或类文件对象(如BytesIO、FileStorage)。
内容的提问来源于stack exchange,提问作者alim1990
相关产品推荐
相关产品推荐

