経緯
PythonでExcelファイルを処理する際、openpyxl
ライブラリを使って.xls
ファイルを読み込もうとしたところ、以下のようなエラーが発生しました。
InvalidFileException: openpyxl does not support the old .xls file format, please use xlrd to read this file, or convert it to the more recent .xlsx file format.
このエラーメッセージをもとに原因を調べた結果、openpyxl
は.xls
形式の古いExcelファイルには対応していないことが分かりました。
結論:.xlsファイルを扱うにはxlrdを使う
エラーの直接的な原因は、読み込もうとしていたファイルの拡張子が.xls
だったことです。openpyxl
が対応しているのは.xlsx
形式のみで、.xls
(Excel 97-2003形式)は非対応です。
そのため、.xls
ファイルを読み込むためには、xlrd
ライブラリを使用する必要があります。
以下に、glob
で.xls
ファイルを取得し、xlrd
で開く例をご紹介します。
xlrdで.xlsファイルを読み込む例
import glob
import xlrd
# カレントディレクトリにある .xls ファイルを取得する(1件目を対象)
file = glob.glob('./*.xls')[0]
# .xls ファイルを開く
wb = xlrd.open_workbook(file)
このようにすれば、wb
という変数に読み込んだExcelファイルが格納されます。
あとは通常どおり、ワークシートを取得してデータを処理していくことが可能です。
注意点と補足
・.xlsx
ファイルを読みたい場合は、openpyxl
を使うのが正解です。ファイル形式に応じてライブラリを使い分けましょう。
・.xls
ファイルを.xlsx
形式に変換しておくという手もあります。Excelで一度開き、[名前を付けて保存]から.xlsx
形式で保存すると、openpyxl
でも扱えるようになります。
・xlrd
は最新版(2.x系)では.xls
形式のみ対応しており、.xlsx
は非対応です。.xlsx
も扱いたい場合は、openpyxl
やpandas
+openpyxl
との併用がおすすめです。
まとめ
“InvalidFileException”というエラーは、openpyxl
で.xls
形式のExcelファイルを開こうとした際に発生します。
この場合は、.xls
形式に対応しているxlrd
を使用することで解決できます。
ファイル形式によって使用するライブラリが異なる点に注意しつつ、適切な方法でExcelファイルを操作しましょう。
最後までお読みいただき、ありがとうございました。