Skip to content

Excel xlsxファイルのサポートエラー: xlrd.biffh.XLRDErrorの解決方法

問題の概要

Pythonでpandas.read_excel()を使用してExcelファイル(特にマクロ有効ファイル.xlsm)を読み取ろうとすると、次のエラーが発生することがあります:

xlrd.biffh.XLRDError: Excel xlsx file; not supported

このエラーは、ローカル環境では正常に動作するコードが、本番環境(この場合はPCF - Pivotal Cloud Foundry)でデプロイされた際に発生するケースが多く見られます。

エラーの原因

このエラーの根本的な原因は、xlrdライブラリのバージョン2.0.0以降での大きな仕様変更にあります:

重要

xlrd 2.0.0以降、.xlsxファイル(.xlsmを含む)のサポートが明示的に削除されました

xlrdは現在、従来の.xls形式のファイルのみをサポートしており、新しい.xlsx.xlsm形式のファイルには対応していません。

推奨される解決方法

方法1: openpyxlエンジンの使用(推奨)

最も安全で現代的な解決策は、openpyxlエンジンを明示的に指定してPandasを使用することです。

python
import pandas as pd
import os

# openpyxlエンジンを明示的に指定
df1 = pd.read_excel(
    os.path.join(APP_PATH, "Data", "aug_latest.xlsm"),
    engine='openpyxl'
)

必要な手順:

  1. 最新版のPandasをインストール(少なくとも1.0.1以上、可能なら最新版)
  2. openpyxlをインストール:
    bash
    pip install openpyxl
  3. コード内でengine='openpyxl'を明示的に指定

方法2: 代替ライブラリの使用

openpyxl以外にも、.xlsxファイルを扱えるライブラリがあります:

bash
pip install openpyxl
bash
pip install xlwings
bash
pip install pyxlsb  # バイナリExcelファイル用

非推奨の回避方法

セキュリティ警告

古いバージョンのxlrd(1.2.0)を使用する方法は強く非推奨です

互換性の問題から、一部の記事では古いバージョンのxlrdをインストールする方法が提案されています:

bash
pip install xlrd==1.2.0

しかし、この方法には重大なセキュリティリスクが伴います。xlrd 1.2.0には既知の脆弱性があり、悪意のあるExcelファイルを処理する際にセキュリティ問題を引き起こす可能性があります。

まとめ

方法推奨度メリットデメリット
openpyxlを使用⭐⭐⭐⭐⭐安全、現代的なサポート追加ライブラリが必要
他のエンジンを使用⭐⭐⭐⭐状況に応じて最適化可能ライブラリごとの学習コスト
xlrd 1.2.0にダウングレード簡単重大なセキュリティリスク

ベストプラクティス: 常にengine='openpyxl'を明示的に指定し、最新のPandasとopenpyxlを使用しましょう。これにより、セキュリティを担保しながら.xlsx.xlsmファイルを安全に処理できます。

参考資料