pyExcelerator读取某些文件时出错
我在使用 pyExcelerator 读取一些 xls 文件时遇到了问题。
我写了一些 Python 脚本,这些脚本使用这个库来解析 XLS 文件,并把信息填充到数据库中。
这些脚本解析的文件模板可能会有所不同,我有时需要重新配置脚本来处理它们。在其中一个模板上,我遇到了问题:pyExcelerator 直接抛出了一个异常:
Traceback (most recent call last):
File "/home/* * */parsexls.py",
line 64, in handle_label
parser.parse()
File "/home/* * */parsers.py", line 335, in parse
self.contents = pyExcelerator.parse_xls(self.file_record.file,
self.encoding)
File "/usr/local/lib/python2.6/dist-packages/pyExcelerator/ImportXLS.py",
line 327, in parse_xls
ole_streams = CompoundDoc.Reader(filename).STREAMS
File "/usr/local/lib/python2.6/dist-packages/pyExcelerator/CompoundDoc.py",
line 67, in __init__
self.__build_short_sectors_data()
File "/usr/local/lib/python2.6/dist-packages/pyExcelerator/CompoundDoc.py",
line 256, in __build_short_sectors_data
dentry_start_sid, stream_size) = self.dir_entry_list[0]
IndexError: list index out of range
一些有问题的 XLS 文件里包含了空的工作表,删除这些空表后问题解决了,但很多文件即使没有空表也无法处理。这些文件里没有什么特别的内容,也没有公式或图片——只有字符串、数字和日期。
我发现 pyExcelerator 的作者似乎已经不再维护这个库了 :(
如果有任何建议来解决这个问题,我会非常感激。
2 个回答
我是xlrd的作者。它是用来读取XLS文件的,并不是从其他项目分出来的。我还维护一个叫做xlwt的工具,它是用来写XLS文件的,来源于pyExcelerator。pyExcelerator中的parse_xls功能已经被弃用,甚至从xlwt中移除了。你应该使用xlrd。
根据你复现的错误信息,看起来这个文件可能已经损坏。出问题的地方发生在解析表格数据之前。请问这些文件是用什么软件生成的?你能用Excel、OpenOffice.org的Calc或者Gnumeric打开它们吗?xlrd可能会给你更有用的错误信息。你可以把你遇到问题的文件发给我(insert_punctuation('sjmachin', 'lexicon', 'net'));请包含一些有空白表格的文件和一些没有空白表格的文件。顺便问一下,你是用什么方法来去掉空白表格的?在处理有空白表格的文件时,pyExcelerator给你什么错误信息?
你可以试试 xlrd 这个库……我记得它最开始是从 pyExcelerator 这个项目分出来的,所以要用它的话只需要改动一点代码,而且它现在还在积极维护中: