我正在使用Django并需要读取上载的xlsx文件的工作表和单元格。它应该可能与xlrd,但因为文件必须留在内存中,可能不会保存到一个位置,我不知道如何继续。使用xlrd打开BytesIO(xlsx)
这种情况下的起点是一个带有上传输入和提交按钮的网页。提交时,文件被捕获request.FILES['xlsx_file'].file
并发送给处理类,该处理类将不得不提取所有重要数据以供进一步处理。
request.FILES['xlsx_file'].file
的类型是BytesIO,并且由于没有getitem方法,xlrd无法读取该类型。
转换BytesIO到StringIO的错误消息后似乎保持不变'_io.StringIO' object has no attribute '__getitem__'
file_enc = chardet.detect(xlsx_file.read(8))['encoding']
xlsx_file.seek(0)
sio = io.StringIO(xlsx_file.read().decode(encoding=file_enc, errors='replace'))
workbook = xlrd.open_workbook(file_contents=sio)
嗨,你可以给我们任何你用来解决这个问题的代码吗?这将有助于达成解决方案。 从您当前的描述中,我只能冒险猜测xlrd需要一个类似文件的对象,所以应该可以获取上传的xlsx文件,将其提供给一个“StringIO”对象并将其传递给xlrd。 – Protagonist
对于这种特殊情况,没有太多的代码,但我会尝试给出更多的上下文。 –
所以你认为一个StringIO就足够了? –