上図のようなエラーメッセージが出た場合、ファイルが破損していて開けなくなる場合があります。
初めて出たときは、「え?何が起きたの?」とかなり焦ったかと思います。
でも、安心してください。エラーの解決方法を一緒に見ていきましょう。
今回は、openpyxlで保存したファイルが破損して開けない原因と対処法を解説いたします。
できるだけわかりやすく解説いたしますので、ぜひ最後まで読んでいってください。
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご理解ください。
openpyxlで保存したファイルが破損して開けなくなる原因5選
openpyxlで保存したファイルが破損して開けなくなる主な原因は下記の5つです。
- 対応していない拡張子で保存した
- 対応していない機能を使用した
- ファイルの書き込み途中でのエラーが発生した
- 不正なデータを書き込みした
- 開いているファイルへ書き込みした
対処法も含めてそれぞれ解説いたします。
対応していない拡張子で保存した
openpyxlで扱えるエクセルファイルの形式は「xlsx」や「xlsm」です。
対応していない拡張子(たとえばxls形式のファイル)や、保存時に誤った拡張子を指定すると、ファイルが破損することがあります。
保存時のコードを今一度ご確認ください。
wb.save('C:/Utatane/output.xlsx') #このようなコード
- 拡張子は正しく記述されていますか?
- 「xls」になったりしていませんか?
私もいまだにスペルミスが多いです…。
「xlsx」以外になっていたら、ひとまず「xlsx」にして再実行してみてください。
対応していない機能を使用した
openpyxlは、エクセルの全ての機能に対応しているわけではありません。
特に「VBA(マクロ)」「特定のグラフ」「複雑な条件付き書式」など、openpyxlで完全にサポートされていない機能を操作すると、ファイルが破損することがあります。
心当たりがある場合は、その処理を省いたプログラムを実行してみてください。
実行後に保存したファイルが問題なく開ける場合は、その処理に原因があります。
また、他のライブラリを試してみるのも一つの手です。
「xlwings」では、openpyxlのようにエクセルファイルを操作することができます。
初めて扱う場合はインストールが必要ですので、下記記事をご参考ください。
特にVBA(マクロ)を扱う場合は、xlwingsの方がいいです。
ファイルの書き込み途中でのエラーが発生した
保存中にプログラムが強制終了したり、エラーが発生すると、Excelファイルが正常に書き込まれず破損することがあります。
複雑な処理を実行したり、非常に大きなデータを処理すると破損する可能性が高まります。
処理を簡略化するか、データを小さくしてから再度実行してみてください。
不正なデータを書き込みした
セルに対して不正なデータ(たとえば、無効な日付や非常に長い文字列など)を書き込むと、ファイルが破損することがあります。
書き込む内容を再確認しましょう。
コードミスが原因でわりと簡単に起きてしまいます。
詳細は下記記事をご参考ください。
開いているファイルへ書き込みした
保存しようとしているファイルが他のプログラムで開かれていると、正しく保存できずにファイルが破損することがあります。
ファイルを開いているプログラムを終了するか、ファイルを閉じましょう。
特定できない場合は、コンピューターを再起動してからプログラムを再実行してみてください。
openpyxlを扱う際の注意点
openpyxlを扱う際の注意点をおさらいしてみましょう。
これらを押さえておくことで、エラーが出ても不安な気持ちが減るばかりか、
原因を特定しやすくなったりもします。
拡張子が「xls」のファイルは取り扱いできない
ごく稀に「xls」形式のファイルが送られてきたりすることがあるかと思います。
しかしながら、openpyxlでは「xls」形式のファイルを開くことも保存することもできません。
どうしても「xls」ファイルを扱いたい場合は、他のライブラリを試してみてください。
pandasなら「xls」ファイルを開いて処理することができます。
開いているファイルは処理できない
openpyxlでは現在開いているファイルを処理することができません。
厳密に言うと、現在開いているファイルを保存することができないのです。
開いているファイルを保存しようとすると「PermissionError」というのが発生します。
一度は見たことがあるかと思います。
PermissionErrorの詳細は下記記事をご参考ください。
PermissionErrorを発生させず、ファイルを開いたまま処理する裏技が実はあります。
下記記事で解説しておりますので、ご参考ください。
エクセルの機能すべてを操作できるわけではない
openpyxlはエクセルを自動処理できる強力なライブラリですが、「VBA(マクロ)」など、操作できない機能もあります。
今後、アップグレードによって操作できる機能は増えていくかと思いますが、現在すべてを自動化できるわけではありませんので、理解しておいてください。
最後に
openpyxlで保存したファイルが破損して開けなくなる原因と対処法を解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!