昨日まで動いていたプログラムが突然動かなくなると焦りますよね。実は私も先日同じような経験をしました。Excelを読み込もうとしただけのことです。しかし見慣れないエラーメッセージが出ました。提出期限の直前に画面が真っ赤になって冷や汗をかきました。私自身もpandasのread_excelを業務でよく使っています。だからこそ、突然動かなくなったときの焦りは、今でも忘れられない経験の一つです。今回は自分が実際にハマった代表的なエラーと、試してみた解決策をそのまま書き残しておきます。
XLRDErrorの原因:xlrd仕様変更
いつも通りにPythonを実行した瞬間のことです。私の画面には冷たいエラーの文字が並びました。「XLRDError」というメッセージですね。前日までは全く問題なく動いていたコードでした。何かの間違いだと思って何度も再起動したのです。これは特定のライブラリを更新した際に起きます。多くの人に発生しているトラブルと言えるでしょう。
実は先日pip updateを実行しました。突然XLRDErrorを吐き始めたのです。コードは何も変えていないので本当に焦りました。昨日まで動いていた集計ツールが動かない状態です。環境設定を変えただけなのに不思議ですよね。提出期限が迫る中で冷や汗が止まりませんでした。エラーが解決するまでに約3時間の調査時間がかかりました。昨日まで使えたものがなぜ今日ダメなのでしょうか。全く理解できず数時間を無駄にしてしまいました。エラーを読んでもサポート外と言われるだけです。

xlrdの仕様変更とライブラリ指定
実はこのエラーには明確な原因が存在します。ライブラリのバージョンが上がったためですね。それまでの書き方が通用しなくなったのが理由でした。具体的にはxlrdというライブラリの仕様です。xlsx形式のファイルをサポートしなくなりました。プログラム側で読み込むライブラリの指定が必要です。正しいものを指定し直さなければなりません。まずは落ち着いてエラーの内容を認識しましょう。
xlrdのxlsxサポート終了とopenpyxl
なぜ昨日まで読めていたファイルが読めないのでしょうか。その理由は非常に明確だと言えます。下請けライブラリであるxlrdが仕様変更したのです。2020年12月に大幅なアップデートがありました。セキュリティ上の懸念があるという理由からです。新しい形式であるxlsxファイルのサポートが切れました。完全に打ち切られてしまったというわけですね。
具体的にはxlrdのバージョンが2.0.0になった瞬間です。古い形式である「.xls」専用のツールになりました。私たちが普段メインで使っているのはxlsxファイルです。これを読み込もうとするとエラーを吐いて止まります。Pythonの世界ではよくある仕様変更ですね。ライブラリの更新で昨日までの常識が通用しなくなります。バージョンアップ後のxlsxサポート状況はゼロです。
openpyxlでxlsx問題解決
この背景を知ることで少し安心できるでしょう。自分のコードが間違っていたわけではないからです。しかし現実に業務で使うExcelファイルはxlsx形式ですね。xlrdを使わずに読み込む別の方法を探す必要があります。そこで登場するのがopenpyxlというエンジンになります。これは新しい標準となる頼もしいライブラリと言えるでしょう。そこで代わりに使うのがopenpyxlというライブラリで、私もこれに切り替えて解決しました。
ここで一度立ち止まって考えてみてください
Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。現役エンジニアのサポートで、未経験から実践的なスキルを身につけられます。
openpyxl導入の落とし穴
xlrdが使えなくなった場合の解決策は簡単です。代わりにopenpyxlというライブラリを使いましょう。pandasのread_excel関数の引数に追加するだけです。「engine=’openpyxl’」と書き加えてください。これで再びxlsxファイルを読み込めるようになります。ところが私はここでもう一つの罠にハマりました。エンジンの指定はしたものの、インストールを忘れていたのです。実はシステム内に存在していませんでした。
エラーメッセージにはxlrdと書いてありました。なのに解決策はopenpyxlで混乱したのを覚えています。指示通りにコードを書き換えて実行しました。今度はMissing optional dependencyというエラーです。まるでモグラ叩きをしているような気分になりました。コマンドプロンプトを開いて手動でインストールします。それに気づくまでにさらに30分を費やしてしまいました。

pandasのExcel解析 外部ライブラリの準備
実はpandasにはExcelを解析する機能がありません。外部の専門ライブラリを呼び出して処理を委託しています。呼び出し先を変更した場合は気をつけなければなりません。そのライブラリがシステム内に存在している必要があります。まずは自分のPCにopenpyxlが入っているか確認しましょう。入っていなければインストールを行う手順が必須です。
Pythonパスの罠とraw文字列
ライブラリの問題をクリアしても別のエラーが出ます。次によく遭遇するのはFileNotFoundErrorでしょう。指定された場所にファイルがないという意味を持ちます。パスを正しく書いているつもりでも発生しがちです。Windows環境でPythonを使っている場合は要注意ですね。フォルダの区切り文字である円マークが原因になります。この文字が特殊な意味を持ってしまうことが多いのです。
ファイルパスを何度見直してもエラーが消えません。Windowsのパス区切り文字が原因だと気づきました。エクスプローラーからコピーして貼り付けただけです。しかしPythonが一部の文字を特殊記号として処理しました。全くデタラメな場所を探しに行っていたわけです。見た目には正しいパスのはずなのに、コンピュータには別の場所として認識されていました。画面上では正しいパスのはずなのに、なぜか見つからないと言われて途方に暮れました。

パスの記述ミス解決:raw文字列かスラッシュ
この問題を解決するためにはraw文字列が有効です。パスの文字列の前にrを付けて記述する手法になります。「r’C:\Users\data.xlsx’」のように書いてみてください。これによりバックスラッシュがそのまま解釈されます。あるいは区切り文字をすべてスラッシュに書き換えます。これも一つの有効な解決策と言えるでしょう。たった一文字の指定ミスでプログラムが動かなくなります。
PermissionErrorの盲点
意外と盲点なのがファイルを開いたままのケースでしょう。読み込もうとしているファイルを自分で開いた状態です。この状態でPythonを実行するとエラーが発生してしまいます。「PermissionError」というアクセス拒否のエラーですね。WindowsというOSが安全のためのロックをかけています。他のソフトが編集中のファイルは勝手に触らせません。
私はこのエラーが出るたびに難しく考えすぎていました。何かプログラムの権限設定がおかしいと疑ったのです。ところが実際にはExcelの画面を閉じるだけで直ります。非常に単純な問題だったことに驚きました。集計結果をExcelで確認しながら修正する時は危険です。ついついファイルを開きっぱなしにしてしまいますよね。

自分では閉じたつもりでも安心はできません。バックグラウンドでExcelのプロセスが残っています。その場合も全く同じエラーが出てしまうのです。タスクマネージャーを開いて残骸を消去してください。エラーの原因はコードの中だけではありません。外側の作業環境にも潜んでいると言えるでしょう。常にファイルは閉じているか確認する癖をつけます。無駄な調査時間を大幅に削減できるようになりますよ。
Excel拡張子:適切なエンジン選択
最近のExcelファイルはxlsx形式が主流です。しかし古いシステムから出力されたデータもあります。xlsという古い形式が使われていることもあるでしょう。この一文字の違いだけで使うべきエンジンが変わります。私はこれに気づかず原因不明のエラーと格闘しました。古い形式のファイルを新しいエンジンで読もうとしたのです。
具体的にはxlsxファイルにはopenpyxlを使います。しかし古いxlsファイルには依然としてxlrdが必要です。ファイルが混在している環境では特に注意しましょう。拡張子を自動で判別して切り替える処理を組み込みます。この仕様を理解していないと動作が不安定になります。一部のファイルだけエラーになる事態を招くでしょう。
拡張子という小さなサインを見落とすと大変です。プログラムの設計自体を見誤ることになってしまいます。私はこの初歩的なミスで2時間も無駄にしました。しかしそのおかげで重要な教訓を身をもって学びました。拡張子ごとに適切な道具を選ぶという重要性ですね。自分が扱おうとしているファイルの正体を把握します。拡張子だけでなく中身の形式まで正確に確認しましょう。

read_excelエラー対処のチェックリスト
これまで様々なエラーとその対処法を見てきました。最終的には何を確認すべきかをパターン化しましょう。これが一番の近道だと言えます。エラーが発生したときに闇雲にコードをいじりません。4つのポイントのチェックリストに沿って確認しましょう。そうすれば必ず原因に辿り着けるはずです。ベテランほどこうした確認作業をルーチン化しています。そうやって初歩的なミスを未然に防ぐわけですね。
まずは読み込みたいファイルの拡張子を確認します。そして拡張子に応じたエンジンが導入済みか調べましょう。openpyxlかxlrdのどちらが必要かを判断してください。次にコード内でのパス指定が正しいかをチェックします。Windows特有のバックスラッシュ問題には要注意ですね。最後にファイルが他のソフトで開かれていないか見ます。権限のロックがかかっていなければ完璧です。
read_excelマスターで効率化とエラー克服
このように準備を整えておくことが大切と言えるでしょう。pandasのread_excelは非常に強力な味方になります。一度仕組みを理解すれば作業効率が劇的に向上するはずです。数百個のファイルを一瞬で読み込めるようになりますよ。自動で集計する夢のような処理も現実のものとなります。エラーが出ても、たいてい原因はこのどれかに収まってきます。自分の場合はこのリストを眺めるだけで、だいぶ落ち着いて対処できるようになりました。
無料プレゼント
Excel業務を自動化する前に確認するチェックリスト(PDF)
自動化していい作業かどうか、VBAかPythonか、最初に避けるべき落とし穴。実務でよく迷うポイントを1枚にまとめました。メールアドレスだけで受け取れます。
¥980 ミニキット
コピペで動かせる3スクリプト+自動化チェックリスト
最新ファイルの自動選択・部署名ゆれの正規化・CSV文字コード確認の3本セット。今週の作業を1つだけ楽にするための最小キットです。
関連リンクとチェックリスト
関連記事
read_excelが動くようになった後、openpyxlを使ってExcelを直接読み書きする場面でも似たようなハマりどころが出てきます。次の記事でまとめました。
関連書籍
Python業務自動化関連書籍を、手元で見返せる形にしておきたい場合
Pythonやデータ処理の自動化は、作りながら同じ基礎を何度も確認する場面が多いです。手元で見返せる本があると、調べ直しの時間を減らしやすいです。
学習サービスとアンケート
このスキルを活かしてさらに前へ進むなら
PythonやExcel自動化スキルを持ったまま、ITエンジニアとして転職したい方には「EBAエデュケーション」が選択肢です。企業が求めるエンジニア像に合わせたカリキュラムで、実務直結のスキルを習得できます。
[アンケート] この記事は役に立ちましたか?

