0

だから私は Python 3.2 と OpenPyXL の反復可能なワークブックを使用してきまし

この戦略を使用して、単純な .zip アーカイブから抽出したファイル (手動と python zipfile パッケージの両方) を読み取ろうとすると、問題が発生します。呼び出す.get_highest_column()と「A」.get_highest_row()が返され、1 が返され、次に示すように各セルの値を出力するように求められると、次のようになります。

wb = load_workbook(filename = file_name, use_iterators = True)
ws = wb.worksheets[0]    # Only need to read the first sheet, nothing fancy
for row in ws.iter_rows():
    for entry in row:
        print(entry.internal_value)

ファイルの実際の大きさに関係なく、A1、A2、A3、A4、A5、A6、および A7 の値を出力します。ファイル自体にこれの理由はなく、Excel で問題なく開くことができます。なぜこのようにするのかについては非常に困惑していますが、解凍された XLSX は Excel 内から保存される前に異なる形式でフォーマットされていると想定しており、OpenPyXL はそれを正しく解釈できません。ファイルを調べて違いを調べることができるように、「.xlsx」の名前を「.zip」に変更しましたが、Excelから保存したものには「xls」内に「theme」というサブフォルダーもあるということ以外はあまりわかりませんでした" フォルダは、以前のバージョンにはありませんでした。フォントと書式データが含まれています。

重要な注意: それを開いて Excel 内から同じファイル名で再保存し、このコードを実行すると、完全に機能します - 正しい最大の行と列の値を返し、すべてのセルの値を正しく出力します。代わりに、ワークブックを開いた直後に OpenPyXL で保存しようとしましたが、これは同じ誤った結果をもたらします。

基本的に、 OpenPyXL で読み取れるように、 .zipファイルから.xlsxファイルを適切に抽出する方法を見つける必要があります。このように処理する必要があるファイルは多数あるため、Excel の外部にある必要があり、できればできるだけ効率的であることが望まれます。

乾杯!

4

1 に答える 1

0

ファイルを手動で抽出した場合にも問題が発生するため、これは zipfile からの抽出とは関係ないようです。Excelで開いて保存したファイルをzipファイルに保存して、何が起こるかを確認します。.xlsxそれが機能する場合、元のファイルが生成された方法に問題があることは明らかです。そうではないかと強く疑っています。

それが問題である場合は、ファイルを抽出できるかどうかを確認し.xlsx(それらは zip ファイル自体です)、Excel で再保存したファイルを元の問題のあるファイルと比較します。Excel はほとんどのものを自由に並べ替えることができるため、xml の比較は簡単ではありませんが、差分を作成できる場合があります。

于 2013-03-19T07:44:13.923 に答える