【この記事の対象者】
- openpyxlが動かない時がある
- よくわからないエラーが出た
- エラーの原因や解決法が知りたい
【この記事を読んでわかること】
- openpyxlが動かない原因と解決法がわかる
- よくあるエラーと解決法がわかる
- よくあるコードミスがわかる
openpyxlが動かない場合の原因と解決法
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
openpyxlが動かない原因は、大きく2つに分けられます。
- エラーが出て動かない
- エラーは出てないけど動かない
1つ1つ解説していきましょう。
エラーが出て動かない
エラーが出て動かない(プログラムがストップする)場合は、コードのスペルミスや、引数の指定ミス・操作ミスが原因となっている可能性が高いです。
私もいろいろなエラーを出してきました。
原因や解決法はエラー内容によって異なります。
よく起こるエラーについては、「よくあるエラーとコードミス」の項をご覧ください。
エラーは出てないけど動かない
エラーは出てないけど動かない場合によくあるのが、以下の2つです。
- 動いているが処理が遅くて終わっていない
- 動いて終わっているが気付かない
ちょっとこんがらがってきましたかね…。
でも紛らわしいのはここまでです!
まず上記のどちらなのかを判断するために、小技を使います。
それは、プログラムの最終行に「print(‘処理が終了しました’)」と記述するだけです。
再度プログラムを実行してみましょう。
「処理が終了しました」と表示されなければ「動いているが処理が遅くて終わっていない」となり、表示されれば「動いて終わっているが気付かない」となります。
それぞれの原因と解決法を見ていきましょう。
動いているが処理が遅くて終わっていない
プログラム自体は動いているが、処理が遅くて終わっていない原因として代表的なのは以下の4つです。
- 膨大な量をセル1つ1つに書き込みしている
- 大量の書式を変更しようとしている
- エクセルファイルが重い
- 空きメモリが少ない
すぐにできるのはメモリをリセットする方法です。
やり方としては、PCを再起動してください。
(もちろん他の作業状況を見て、可能であればで結構です)
再起動後、プログラムを再実行してみて様子を見ましょう。
それでもダメならコードを見直したり、処理するファイルを最適化するしかありません。
下記記事で詳細な解説をしておりますので、ご参考ください。
動いて終わっているが気付かない
「処理が終了しました」と表示されている場合は、プログラムが正常に動いたということになります。
しかし、「出力ファイルが出ていない」「元ファイルが変わっていない」など、処理がされていない場合は、コードに問題があることが多いです。
- 処理を反映していない
- 別のフォルダに出力している
上記2つがよくある原因です。
まずは下記のコードを見てみましょう。
import openpyxl
wb = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws = wb['Sheet1']
ws['A1'].value = 1
一見問題無さそうですが、処理を反映するために保存(出力)するコードがありません。
上記コードだけでは、せっかくの処理が行われなかったことになります。
※エクセルで最後に保存しなかった場合と同じです
下記のような一文を最後に追記しましょう。
wb.save('C://Utatane/output.xlsx')
これで処理が反映されるようになります。
「save」コードはキチンと入れているという方は、
かけ離れたセルを処理していたり、違うシートを処理していて気づかないという場合もありますので、コードをよく確認してみましょう。
次に下記のコードを見てください。
import openpyxl
wb = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws = wb['Sheet1']
ws['A1'].value = 1
wb.save('C://Utatane/output/output.xlsx')
今度は「save」コードが入っています。
しかしよく見ると、読み込みしたフォルダと出力したフォルダが違うということがわかります。
コードの3行目:ファイル(ブック)の読み込み「C://Utatane/input.xlsx」
コードの8行目:ファイルの保存(出力)・・・・「C://Utatane/output/output.xlsx」
このように、些細なコードミスにより、意図しないフォルダに出力してしまうことがあります。
再度コードを確認しましょう。
わたしもよく違うフォルダに出力していました…。
よくあるエラーとコードミス
エラーが発生するのは、ほとんどがコードミスや操作ミスが原因です。
とはいえ初心者の頃はミスをしてあたりまえです。私も数々のミスを犯してきました。
ご自分だけと思わず気楽に見てください。
では、openpyxlでよく発生するエラーと原因・解決法を見ていきましょう。
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
原因として多いのは以下のとおりです。
- 指定したファイル(フォルダ)が存在しない
- 指定する名前が間違っている
- 違う場所を指定している
ファイル名やフォルダ名は大文字・小文字を区別します。
下記のように「指定は大文字」なのに「実際は小文字」だった場合、別の物と認識されてエラーが出ます。
wb = openpyxl.load_workbook('Utatane.xlsx')
その他詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
例外処理などでエラーが出ないようにしたり、開いたままのファイルを自動で閉じたりすることも可能です。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
よくある間違いを紹介いたします。下記のコードをご覧ください。
import openpyxl
wb = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws = wb['sheet1']
どこが間違っているかおわかりでしょうか?
正しくは「sheet1」ではなく「Sheet1」です。
もちろん、実際のシート名が「sheet1」ならこのコードで大丈夫なのですが、
エクセルファイルを新規作成した場合は自動で「Sheet1」となり、この間違いが起こりやすいです。
その他詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
よく起こる間違いは、変数のスペルミスです。
下記コードを見てください。
hensu = 1
print(hensuu)
1行目で「hensu」を作り1を代入しています。ここまではOKです。
しかしながら、2行目で表示するよう指定したのは「hensuu」です。
変数名はコピペするのが無難です。
その他詳しい解説は、下記記事をご参考ください。
list index out of range
規定を超える部分を操作しようとした時に出るエラーです。
実際にないSheet3(シート番号2)などを指定した場合にも起こります。
ファイルとコードを再確認しましょう。
最後に
openpyxlが動かない場合の原因と解決法を解説いたしました。
何度かお伝えしましたが、ミス自体は悪くありません。
初心者の頃はミスをしたから理解することも多くあります。
しかしながら、同じミスを繰り返してしまうと、時間を無駄にしたり、成長につながりにくくなってしまいます。
解決法や対処法がわかったらキチンと改善に努めてください。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!