Python 如何使用openpyxl读取xlsx流文件

Python 如何使用openpyxl读取xlsx流文件,python,openpyxl,Python,Openpyxl,我正在尝试读取流式xlsx文件。用户通过用户界面输入数据,然后数据通过xlsx中的流传送给我。我怎么读呢?我找不到任何文档 cat text.xlsx | python myprogram.py 我如何阅读此流?任何帮助都将不胜感激。我不确定openpyxl是否允许这种读取。我正在使用python3openpyxl。加载工作簿的第一个参数文件名不仅可以是文件名,还可以是类似文件的对象,并且是表示程序标准的类似文件的对象 但是,您需要在二进制模式下使用它,请参阅文档中关于二进制标准流的注释 imp

我正在尝试读取流式xlsx文件。用户通过用户界面输入数据,然后数据通过xlsx中的流传送给我。我怎么读呢?我找不到任何文档

cat text.xlsx | python myprogram.py


我如何阅读此流?任何帮助都将不胜感激。我不确定openpyxl是否允许这种读取。我正在使用python3

openpyxl。加载工作簿
的第一个参数文件名不仅可以是文件名,还可以是类似文件的对象,并且是表示程序标准的类似文件的对象

但是,您需要在二进制模式下使用它,请参阅文档中关于二进制标准流的注释

import sys
from openpyxl import load_workbook

wb = load_workbook(sys.stdin.buffer)
print(wb.sheetnames)
运行:


openpyxl.load\u workbook
的第一个参数
filename
不仅可以是文件名,还可以是类似文件的对象,它是表示程序标准的类似文件的对象

但是,您需要在二进制模式下使用它,请参阅文档中关于二进制标准流的注释

import sys
from openpyxl import load_workbook

wb = load_workbook(sys.stdin.buffer)
print(wb.sheetnames)
运行:


我没有足够的代表发表评论,因此我将此作为回答

正如@CheradenineZK提到的,如果输入来自(Azure)blob存储,则需要将其包装在字节缓冲区中。我一直在努力想到底该怎么做

导入io
导入openpyxl
bytes_in=io.BytesIO(myblob.read())
wb=openpyxl.load\u工作簿(字节\u英寸)

是为我做的。

我没有足够的代表发表评论,因此我将此作为答案发布

正如@CheradenineZK提到的,如果输入来自(Azure)blob存储,则需要将其包装在字节缓冲区中。我一直在努力想到底该怎么做

导入io
导入openpyxl
bytes_in=io.BytesIO(myblob.read())
wb=openpyxl.load\u工作簿(字节\u英寸)

是为我做的。

我得到以下错误:raise BadZipFile(“文件不是zip文件”)zipfile.BadZipFile:文件不是zip文件file@KumarGovind你确定那是XLSX而不是XLS吗?你能把一个样本文件上传到某个地方吗。您也可以在控制台中尝试
文件test.xlsx
:它应该能识别类型为“Microsoft OOXML”或类似的内容。它肯定是一个xlsx文件。@KumarGovind我无法重现错误。XLSX是一个zip文件,所以openpyxl告诉您它不是,这很奇怪。如果您将文件从blobstorage以字节流形式传输,例如,请确保先将字节放入bytebuffer。我收到以下错误:raise BadZipFile(“文件不是zip文件”)zipfile.BadZipFile:文件不是zip文件file@KumarGovind你确定那是XLSX而不是XLS吗?你能把一个样本文件上传到某个地方吗。您也可以在控制台中尝试
文件test.xlsx
:它应该能识别类型为“Microsoft OOXML”或类似的内容。它肯定是一个xlsx文件。@KumarGovind我无法重现错误。XLSX是一个zip文件,所以openpyxl告诉您它不是,这很奇怪。如果您从blobstorage将文件作为字节流传输,例如,请确保首先将字节放入bytebuffer。