【问题标题】:pyExcelerator has problems reading some filespyExcelerator 在读取某些文件时出现问题
【发布时间】:2009-12-15 18:13:22
【问题描述】:

在读取一些 xls 文件时,我在使用 pyExcelerator 时遇到了问题。

我编写了一些 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 被它的作者抛弃了:(

非常感谢任何有关解决此问题的建议。

【问题讨论】:

    标签: python excel xls pyexcelerator


    【解决方案1】:

    我是 xlrd 的作者。它reads XLS 文件并且不是任何东西的分支。我维护了一个名为 xlwt 的包,它 writes XLS 文件并且是 pyExcelerator 的一个分支。 pyExcelerator 中的 parse_xls 功能已被弃用,以至于从 xlwt 中删除。请改用 xlrd。

    鉴于您复制的回溯,该文件看起来可能已损坏。它在那里所做的事情发生在工作表数据被解析之前。什么软件产生这些文件?你能用 Excel 或 OpenOffice.org 的 Calc 或 Gnumeric 打开它们吗? xlrd 可能会给你一个更有意义的错误信息。您可能想向我发送 (insert_punctuation('sjmachin', 'lexicon', 'net')) 失败文件的副本;请包括一些有和一些没有空纸。顺便问一下,你用什么来删除空床单?处理带有空工作表的文件时,您从 pyExcelerator 收到什么错误消息?

    【讨论】:

    • 哇,谢谢你的回复,约翰。我已经发现 xlrd 似乎可以正常读取这些文件而没有任何问题。这些文件是通过 Microsoft Office 2003 (XP?) 生成的,但由于 xlrd 似乎可以读取它们,我想现在没有什么好担心的了。谢谢你。感谢您提供出色的图书馆。
    • 感谢您澄清我对 xlrd 与 xlwt 的错误假设,也感谢您的项目......这是一个非常有用的库。
    • @DataGreed:我预计 pyExcelerator 只有在出现由 3rd 方软件创建的有缺陷的文件时才会在 OLE 复合文档级别失败。错误消息表明内部目录为空,即文件损坏。我不希望 Excel 2003 中的文件损坏。尽管 xlrd 似乎可以读取它们,但我非常希望拥有这样一个文件的副本,以便找出问题的性质,并确保xlrd 有一个原则性的修复,并且没有意外读取文件 OK(看似)。
    • @DataGreed:你好,你好,我很想调查一下这个问题。请通过私人电子邮件与我联系。
    【解决方案2】:

    您可能希望尝试一下 xlrd...它开始(我相信)作为 pyExcelerator 的一个分支,因此合并需要很少的代码更改,但它正在积极维护:

    http://pypi.python.org/pypi/xlrd

    Project website

    General info, release notes and history from the documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多