0

私は xlrd 0.6.1 と 0.7.1 を使用して xls ファイルを開きましたが、どちらも次のように不平を言いました:

Traceback (most recent call last):
  File "../../xls2csv.py", line 53, in <module>
    book = xlrd.open_workbook(args[0])
  File "build/bdist.linux-i686/egg/xlrd/__init__.py", line 366, in open_workbook

  File "build/bdist.linux-i686/egg/xlrd/__init__.py", line 760, in __init__

  File "build/bdist.linux-i686/egg/xlrd/compdoc.py", line 149, in __init__
struct.error: unpack requires a string argument of length 512

私はグーグルで検索し、このアドバイスが役立つことを発見しました:

開いているオフィスで xls ファイルを開き、新しいファイルに保存します。問題はなくなります。

他の誰かが同じ問題を抱えている場合に備えて、ここに投稿します。

4

2 に答える 2

1

Excel、OpenOffice Calc、または Gnumeric では問題なく開く xls ファイルがあるが、xlrd では開かない場合は、xlrd の作成者 (lexicon dot net の sjmachine) に詳細とファイルのコピーを電子メールで送信する必要があります。ファイル、xlrd を改善することができます。これは、あなたと他のすべての xlrd ユーザーに利益をもたらします。

ソースを調べた後に更新します。

あなたが提供したスタック トレースは旧バージョンの 0.6.1 のものです。なぜあなたはそれを使っているのですか?

コードを読んだところによると、xlrd は次のようなメッセージを出力するはずでした

これはすでに規格外です。多くの場合、原因は、データ ペイロード (ワークブック ストリーム) が 512 バイトの倍数ではなく、最後に書き込まれた構造体であり、ライターがパディングを行っていないことです。その場合、不足しているパディングにはアクセスできないため、安全に続行できます。

ただし、xlrd がファイルの末尾に落ちる場合、ファイル サイズが約 7 MB を超える場合に使用される一連のインデックス セクター (MS では「二重間接 FAT」と呼ばれます) に従っています。これらの各セクターの最後の 4 バイトには、チェーン内の次のセクターのセクター番号 (または特別なチェーンの終了値) が含まれます。したがって、これらのセクターのいずれかが 512 バイトより短い場合、ファイルは破損しています。警告メッセージさえ出さずにそこから回復することは、私が良い行動と呼ぶものではなく、SO ユーザーに頼るように勧めるものでもありません。

このファイルのコピーを取得する方法については、電子メールでご連絡ください (必要に応じて、機密保持契約の下で)。

于 2012-02-08T01:31:17.273 に答える