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'
ありがとう
エラーメッセージは、XLSファイルのBOF(Beginning of File)レコードに関連しています。ただし、この例は、XLSXファイルを読み取ろうとしていることを示しています。
これには2つの理由が考えられます。
実際に最新バージョンのxlrdを使用していることを再確認してください。 1つのセルのみのデータを含む新しいXLSXファイルを開くと、そのことが確認されます。
ただし、2番目の条件が発生し、ファイルが暗号化されていると思います。これは、xlrdバージョン0.9.2をすでに使用していることを上で述べたためです。
XLSXファイルは、ワークブックのパスワードを明示的に適用した場合、およびワークシートの一部の要素をパスワードで保護した場合にも暗号化されます。そのため、パスワードを開かなくても、暗号化されたXLSXファイルを作成できます。
更新:ファイルがExcelで開かれていることを示す@BStewの3番目、より可能性の高い回答を参照してください。
3番目の理由もあります。ファイルが既にExcelで開かれている場合。同じエラーが発生します。
4番目の理由として、read_Excelを使用してcsvファイルを読み取ったことが考えられます。 (それは私に起こったことではありません...)
このエラーは、xlsxファイルが実際にhtmlである場合に発生する可能性があります。これを確認するには、テキストエディターで開きます。このエラーが発生したとき、パンダを使用して解決しました:
import pandas as pd
df_list = pd.read_html('filename.xlsx')
df = pd.DataFrame(df_list[0])
私の場合、問題は共有フォルダ自体にありました。
ケースインポイント:WIN2012サーバーに共有フォルダーがあり、ユーザーが.xlsxファイルをドロップしてから、my pythonスクリプトを使用して、そのxlsxファイルをデータベーステーブルにロードします。
ユーザーが古いファイルを削除してロードするファイルを配置したとしても、BOFエラーはバイト文字列とバイト文字列でのユーザーの名前について言及し続けました-ワークシートのxlsxファイル内にはどこもありませんユーザーの名前はありましたか。その上で、.xlsxを新しく作成したフォルダーにコピーし、その新しいフォルダーを参照するスクリプトを実行すると、機能しました。
結局、私は共有フォルダを削除しましたが、私とユーザーには1アイテムしか表示されていなくても、5アイテムが削除されることに気付きました。 Windows管理スキルの不足が原因だと思いますが、それが原因でした。
同じエラーメッセージが表示されました。このスクリプトは別のフォルダーにあるxlsxファイルに対して機能し、ファイルはほとんど同じであるため、私には奇妙に見えます。
なぜこれが起こったのか、私にはまだわかりません。しかし、最後に、すべてのExcelファイルを別のフォルダーにコピーし、スクリプトが機能しました。上記の提案のいずれもうまくいかない場合に試すオプション...