web-dev-qa-db-ja.com

エラー:サポートされていない形式、または破損したファイル:予期されたBOFレコード

Xlsxファイルを開き、その内容を印刷しようとしています。私はこのエラーに遭遇し続けます:

import xlrd
book = xlrd.open_workbook("file.xlsx")
print "The number of worksheets is", book.nsheets
print "Worksheet name(s):", book.sheet_names()
print

sh = book.sheet_by_index(0)

print sh.name, sh.nrows, sh.ncols
print

print "Cell D30 is", sh.cell_value(rowx=29, colx=3)
print

for rx in range(5):
    print sh.row(rx)
    print

このエラーを出力します

raise XLRDError('Unsupported format, or corrupt file: ' + msg)
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found    '\xff\xfeT\x00i\x00m\x00'

ありがとう

16
user2353003

エラーメッセージは、XLSファイルのBOF(Beginning of File)レコードに関連しています。ただし、この例は、XLSXファイルを読み取ろうとしていることを示しています。

これには2つの理由が考えられます。

  1. Xlrdのバージョンが古く、xlsxファイルの読み取りをサポートしていません。
  2. XLSXファイルは暗号化されているため、Zip形式ではなくOLE複合ドキュメント形式で保存され、古い形式のXLSファイルとしてxlrdに表示されます。

実際に最新バージョンのxlrdを使用していることを再確認してください。 1つのセルのみのデータを含む新しいXLSXファイルを開くと、そのことが確認されます。

ただし、2番目の条件が発生し、ファイルが暗号化されていると思います。これは、xlrdバージョン0.9.2をすでに使用していることを上で述べたためです。

XLSXファイルは、ワークブックのパスワードを明示的に適用した場合、およびワークシートの一部の要素をパスワードで保護した場合にも暗号化されます。そのため、パスワードを開かなくても、暗号化されたXLSXファイルを作成できます。

更新:ファイルがExcelで開かれていることを示す@BStewの3番目、より可能性の高い回答を参照してください。

13
jmcnamara

3番目の理由もあります。ファイルが既にExcelで開かれている場合。同じエラーが発生します。

23
BStew

4番目の理由として、read_Excelを使用してcsvファイルを読み取ったことが考えられます。 (それは私に起こったことではありません...)

21
Mike Chan

このエラーは、xlsxファイルが実際にhtmlである場合に発生する可能性があります。これを確認するには、テキストエディターで開きます。このエラーが発生したとき、パンダを使用して解決しました:

import pandas as pd
df_list = pd.read_html('filename.xlsx')
df = pd.DataFrame(df_list[0])
5
Pluto

私の場合、問題は共有フォルダ自体にありました。

ケースインポイント:WIN2012サーバーに共有フォルダーがあり、ユーザーが.xlsxファイルをドロップしてから、my pythonスクリプトを使用して、そのxlsxファイルをデータベーステーブルにロードします。

ユーザーが古いファイルを削除してロードするファイルを配置したとしても、BOFエラーはバイト文字列とバイト文字列でのユーザーの名前について言及し続けました-ワークシートのxlsxファイル内にはどこもありませんユーザーの名前はありましたか。その上で、.xlsxを新しく作成したフォルダーにコピーし、その新しいフォルダーを参照するスクリプトを実行すると、機能しました。

結局、私は共有フォルダを削除しましたが、私とユーザーには1アイテムしか表示されていなくても、5アイテムが削除されることに気付きました。 Windows管理スキルの不足が原因だと思いますが、それが原因でした。

0
Ali Khan

同じエラーメッセージが表示されました。このスクリプトは別のフォルダーにあるxlsxファイルに対して機能し、ファイルはほとんど同じであるため、私には奇妙に見えます。

なぜこれが起こったのか、私にはまだわかりません。しかし、最後に、すべてのExcelファイルを別のフォルダーにコピーし、スクリプトが機能しました。上記の提案のいずれもうまくいかない場合に試すオプション...

0
jxshen