- openpyxlで条件付き書式を設定したのに反映されなかった
- 条件付き書式が反映されない原因や対処法が知りたい
このようなお悩みを解決に導きます。
苦労して設定した条件付き書式が反映されなかったら、不安というか、嫌な気持ちになりますよね。
でも大丈夫です。
本記事を最後まで読むことで、下記のようなことがわかります。
- openpyxlで設定した条件付き書式が反映されない原因や対処法がわかる
- openpyxlで条件付き書式を設定する際の注意点を学べる
Python歴3年の私が、できるだけわかりやすく解説いたします。
openpyxlで設定した条件付き書式が反映されない原因と対処法
主な原因は下記の7つです。
- 条件付き書式の条件が適切に設定されていない
- 条件付き書式を適用する範囲が正しく設定されていない
- セルの書式が競合している
- 保存していない・別名保存している
- 保存形式がエクセル形式ではない
- openpyxlのバージョンが古い
- openpyxlで処理できない条件を設定している
1つ1つ解説していきます。
条件付き書式の条件が適切に設定されていない
書式が適用される条件が適切に設定されていない場合、条件付き書式が意図通りに動作しません。
「FormulaRule」などでルールを設定しますが、「条件」と「条件に当てはまる場合の処理」を再度ご確認ください。
コードを見てもわかりにくい場合は、保存後のエクセルを開いて確認してみましょう。
メニューバーの「ホーム」→「条件付き書式」から確認できます。
条件付き書式欄に表示されていない場合は、コードミスを疑うか、他の原因もチェックしてみてください。
条件付き書式を適用する範囲が正しく設定されていない
条件付き書式の適用範囲が正しく指定されていない場合、期待通りのセルに反映されません。
「conditional_formatting」などで適用範囲を設定しますが、範囲を再度確認してみてください。
適用したいセルが指定されていますか?
またよくあるのが、別のワークシートに適用してしまっている場合です。
どのワークシートに適用しているのか、コードをさかのぼって追ってみてください。
セルの書式が競合している
「A1セルの値が100以上なら文字を赤にする」という条件付き書式を適用したとします。
しかしながら、既に「A1セルの値が100以上なら文字を青にする」という条件付き書式が適用されていたら、新しい書式は反映されない場合があります。
また、条件付き書式だけではなく、直接書式を変更している場合も、競合してしまいます。
エクセルを開いて書式や条件付き書式を確認してみましょう。
保存していない・別名保存している
条件付き書式を設定しても、ファイル(ブック)を保存しないと適用されません。
下記のような「ファイルを保存するコード」が書かれているか確認してみましょう。
wb.save('C:/Utatane/output.xlsx')
また、既存のエクセルファイルを読み込んだ場合は、ファイル名も確認しましょう。
「読み込んだファイル名」と「保存するファイル名」が違っていれば「別名保存」になり、元のファイル(読み込んだファイル)は更新されません。
別名保存したファイルを確認するか、ファイル名を統一して上書き保存しましょう。
また、フォルダ名(上記例では「C:/Utatane/」の部分)も重要です。
上記の例では、「Cドライブ」の「Utataneフォルダ」の中に保存したということを指します。
別のフォルダに保存されている場合もありますので、フォルダ名や階層を確認してみましょう。
保存形式がエクセル形式ではない
保存するファイルの形式が「.xlsx」ではなく、「.csv」や他の形式だと条件付き書式が保存されない場合があります。
保存する際のファイル名(形式)を確認し、「.xlsx」になっていなければ、「xlsx」に変更してみてください。
wb.save('C:/Utatane/output.xlsx')
openpyxlのバージョンが古い
条件付き書式のサポートはopenpyxlのバージョンに依存します。
古いバージョンでは、条件付き書式の機能が十分にサポートされていないことがあります。
openpyxlをインストールしたのが随分前であったり、何らかの理由でダウングレードした心当たりがある方は、アップグレードしてみましょう。
下記のコードを実行するだけなので、簡単にできます。
pip install --upgrade openpyxl
詳細は下記記事をご参考ください。
openpyxlで処理できない条件を設定している
複雑な条件付き書式を設定した場合、openpyxlでは処理できず、期待通りに反映されない場合があります。
少しずつ条件を簡略化してみてください。
openpyxlで条件付き書式を設定する際の注意点
ここからは、openpyxlで条件付き書式を設定する際の注意点を紹介いたします。
前項からの繰り返しになるものもありますが、おさらいを兼ねて見ていきましょう。
複雑な条件は避ける
openpyxlでは、複雑な条件付き書式が処理できず、反映されない場合があります。
複雑な書式を思い通りに操作できたら便利なのですが、残念ながらしかたがありません。
できるだけシンプルな条件で設定するようにしましょう。
既存ファイルへの設定は避ける
既存ファイルには、既に条件付き書式が設定されていたり、直接書式が変更されている場合があります。
(赤文字など)
そこへさらに条件付き書式を適用してしまうと、競合が起きてうまく反映されません。
既存ファイルへの設定は避けるのが無難です。
どうしても設定したい場合は、新しいブックやシートを作って値をコピーするなど、工夫してみてください。
最後に
openpyxlで条件付き書式が反映されない原因と対処法を解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!