使用xlrd读取Excel文件 [英] Reading excel files with xlrd
本文介绍了使用xlrd读取Excel文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在读取无法控制的Perl脚本编写的.xls文件时遇到问题.这些文件在单元格中包含一些格式和换行符.
I'm having problems reading .xls files written by a Perl script which I have no control over. The files contain some formatting and line breaks within cells.
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损坏的任何信息,甚至看不见[2] == 4部分.
I'm not able to find any info about CompDocError or Workbook corruption, even less the seen[2] == 4 part.
推荐答案
+1给Ramiel.只需在 compdoc.py
中注释掉这些行( xlrd 1.2.0
中的 425-27
行):
+1 to Ramiel.
Just comment out these lines in compdoc.py
(lines 425-27
in xlrd 1.2.0
):
if self.seen[s]:
print("_locate_stream(%s): seen" % qname, file=self.logfile);dump_list(self.seen, 20, self.logfile)
raise CompDocError("%s corruption: seen[%d] == %d" % (qname, s, self.seen[s]))
这篇关于使用xlrd读取Excel文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文