2013-05-12 47 views
7

我試圖打開一個xlsx文件,只是打印它的內容。我一直運行到這個錯誤:錯誤:不支持的格式或損壞的文件:期望BOF記錄

import xlrd 
book = xlrd.open_workbook("file.xlsx") 
print "The number of worksheets is", book.nsheets 
print "Worksheet name(s):", book.sheet_names() 
print 

sh = book.sheet_by_index(0) 

print sh.name, sh.nrows, sh.ncols 
print 

print "Cell D30 is", sh.cell_value(rowx=29, colx=3) 
print 

for rx in range(5): 
    print sh.row(rx) 
    print 

它打印出此錯誤

raise XLRDError('Unsupported format, or corrupt file: ' + msg) 
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '\xff\xfeT\x00i\x00m\x00' 

感謝

+0

什麼是您的xlrd版本? – 2013-05-12 07:17:57

+0

9.2我相信它最近的 – user2353003 2013-05-12 16:57:03

回答

8

錯誤消息涉及BOF(文件頭)的XLS文件的記錄。但是,該示例顯示您正在嘗試讀取XLSX文件。

這有兩個可能的原因:

  1. 你xlrd的版本是舊的,不支持讀取XLSX文件。
  2. XLSX文件被加密,因此以OLE複合文檔格式存儲,而不是zip格式,使xlrd看起來像舊格式的XLS文件。

仔細檢查一下,您是否正在使用最新版本的xlrd。只在一個單元格中打開一個包含數據的新X​​LSX文件應該驗證。

但是,我猜你遇到第二個條件,並且該文件是加密的,因爲你已經使用xlrd版本0.9.2。

如果您明確應用工作簿密碼,並且密碼保護了某些工作表元素,則XLSX文件將被加密。因此,即使您不需要密碼來打開它,也可以使用加密的XLSX文件。

更新:請參閱@ BStew的第三個更可能的答案,即該文件由Excel打開。

10

還有第三個原因。 Excel文件已被打開的情況。 它會產生相同的錯誤。

+1

這三句話爲我節省了很多時間和挫折! – 2016-07-14 11:02:08

6

也許第四個原因,你用read_excel讀取一個csv文件。 (這不是發生在我身上的事情......)

1

當xlsx文件實際上是html時,你可以得到這個錯誤;你可以用文本編輯器打開它來驗證這一點。當我得到這個錯誤,我用熊貓解決它:

import pandas as pd 
df_list = pd.read_html('filename.xlsx') 
df = pd.DataFrame(df_list[0]) 
相關問題