我正在使用Django并需要读取上传的xlsx文件的工作表和单元格。虽然使用xlrd应该是可行的,但由于文件必须保留在内存中且可能不能保存到位置,我不确定如何继续进行。
在这种情况下,起点是一个带有上传输入和提交按钮的网页。当提交时,文件被捕获并发送到一个处理类中,该类必须提取所有重要数据以供进一步处理。
将BytesIO转换为StringIO后,错误消息似乎仍然相同:
在这种情况下,起点是一个带有上传输入和提交按钮的网页。当提交时,文件被捕获并发送到一个处理类中,该类必须提取所有重要数据以供进一步处理。
request.FILES['xlsx_file'].file
的类型是BytesIO,而xlrd无法读取该类型,因为没有getitem方法。将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)
open_workbook(file_contents=xlsx_file.read().decode(encoding=file_enc, errors='replace'))
。我误解了文档,但我确信file_contents=
可以与字符串一起使用。 - Protagonist