0

いくつかの xls ファイルを読み取るときに pyExcelerator を使用すると問題が発生します。

このライブラリを使用して XLS ファイルを解析し、データベースに情報を入力する、私が書いた Python スクリプトがいくつかあります。

これらのスクリプトが解析するファイルのテンプレートは異なる場合があり、それらを処理するためにスクリプトを再構成することがあります。私が問題に遭遇したテンプレートの1つで: 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はその作者によって放棄されています:(

この問題を修正するための提案は大歓迎です。

4

2 に答える 2

2

私はxlrdの作者です。それはXLSファイルを読み込み、何かのフォークではありません。私は、 XLS ファイルを書き込み、pyExcelerator のフォークである xlwtというパッケージ管理しています。pyExcelerator の parse_xls 機能は、xlwt から削除されるまで廃止されました。代わりに xlrd を使用してください。

再現したトレースバックを見ると、ファイルが破損しているようです。そこで行われていることは、シート データが解析されるかなり前に行われます。これらのファイルを生成するソフトウェアは何ですか? Excel や OpenOffice.org の Calc や Gnumeric で開くことはできますか? xlrd は、より意味のあるエラー メッセージを表示する場合があります。失敗したファイルのコピーを (insert_punctuation('sjmachin', 'lexicon', 'net')) にお送りください。空のシートがあるものとないものを含めてください。ところで、空のシートを取り除くために何を使用していますか? 空のシートを含むファイルを処理するときに、pyExcelerator からどのようなエラー メッセージが表示されますか?

于 2009-12-15T10:13:22.017 に答える
1

xlrd を試してみてください... pyExcelerator のフォークとして (私は信じています) 開始したため、組み込むにはほとんどコードを変更する必要はありませんが、積極的に維持されています。

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

プロジェクトのウェブサイト

ドキュメントの一般情報、リリース ノート、および履歴

于 2009-12-10T14:21:02.093 に答える