【发布时间】:2012-09-24 04:56:36
【问题描述】:
我在读取由我无法控制的 Perl 脚本编写的 .xls 文件时遇到问题。这些文件在单元格中包含一些格式和换行符。
filename = '/home/shared/testfile.xls'
book = xlrd.open_workbook(filename)
sheet = book.sheet_by_index(0)
for rowIndex in xrange(1, sheet.nrows):
row = sheet.row(rowIndex)
这会引发以下错误:
_locate_stream(Workbook): seen
0 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
20 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
172480= 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
172500 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 2
172520 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
173840= 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
173860 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1
173880 1 1 1 1 1 1 1 1
Traceback (most recent call last):
File "/home/shared/xlrdtest.py", line 5, in <module>
book = xlrd.open_workbook(filename)
File "/usr/local/lib/python2.7/site-packages/xlrd/__init__.py", line 443, in open_workbook
ragged_rows=ragged_rows,
File "/usr/local/lib/python2.7/site-packages/xlrd/book.py", line 84, in open_workbook_xls
ragged_rows=ragged_rows,
File "/usr/local/lib/python2.7/site-packages/xlrd/book.py", line 616, in biff2_8_load
self.mem, self.base, self.stream_len = cd.locate_named_stream(qname)
File "/usr/local/lib/python2.7/site-packages/xlrd/compdoc.py", line 393, in locate_named_stream
d.tot_size, qname, d.DID+6)
File "/usr/local/lib/python2.7/site-packages/xlrd/compdoc.py", line 421, in _locate_stream
raise CompDocError("%s corruption: seen[%d] == %d" % (qname, s, self.seen[s]))
xlrd.compdoc.CompDocError: Workbook corruption: seen[2] == 4
我找不到任何有关 CompDocError 或 Workbook 损坏的信息,更不用说 see[2] == 4 部分。
【问题讨论】:
-
“文件名”包含什么?
-
它只是一个文件路径,例如 'D:\\testfile.xls' 或 '/home/shared/testfile.xls' (更新问题)
-
@snurre,尝试将有问题的 xls 文件“附加”到这篇文章,这样错误就可以重现
-
恐怕我做不到,因为它们包含机密信息。还应该注意的是,如果 xlrd 文件已经用 Excel 打开并保存,我可以加载它们,所以我怀疑这都与 Perl 脚本如何写入和保存文件有关。跨度>
-
我是 xlrd 的作者。你运行的是什么版本的 xlrd?如果您不能根据保密协议向我发送您的 perl 编写文件的副本,那么最好的办法是告诉我您的电子邮件地址,以便我可以向您发送一个显示结构的调查脚本(不是文件的内容)。