2013-05-12 45 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]) 
相关问题