我正在使用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就足夠了? –