使用 xlrd 打开 BytesIO (xlsx)

2024-05-18

我正在使用 Django,需要读取上传的 xlsx 文件的工作表和单元格。使用 xlrd 应该可以,但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置。

本例中的起点是一个带有上传输入和提交按钮的网页。提交后,文件被捕获request.FILES['xlsx_file'].file并发送到处理类,该处理类必须提取所有重要数据以进行进一步处理。

的类型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)

我正在将我的评论转移到它自己的答案中。它与更新问题中给出的示例代码(包括解码)相关:

好的,谢谢你的指点。我下载了xlrd并在本地进行了测试。似乎到达这里的最好方法是向它传递一个字符串,即。open_workbook(file_contents=xlsx_file.read().decode(encoding=file_enc, errors='replace'))。我误解了文档,但我确信 file_contents= 可以使用字符串。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 xlrd 打开 BytesIO (xlsx) 的相关文章

随机推荐