1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Python】CellIsRuleオブジェクト、FormulaRuleオブジェクトを使用して特定のセルや行の表示形式を変える。

Posted at

pythonを使用してExcelファイルの操作を勉強しています。
本日の気づき(復習)は、条件付き書式に関してです。
pythonでExcelを操作するため、openpyxlというパッケージを使用しています。

image.png

上記のようなブック「商品リストを」

image.png

この様な表に変更したいです。
ここでのポイントは

  1. 原価率が55%以下の場合は文字を青色に変更
  2. 製造元が業者Bの行を灰色にする

CellIsRuleオブジェクト

CellIsRule(operator='条件', formula=[],
           font=Fontオブジェクト,
           border=Borderオブジェクト,
           fill=PatternFillオブジェクト)

条件を満たしたセルの書式を変更するには、まず、条件付き書式を作成します。
作成には上記のCellIsRuleオブジェクトを使います。

operator引数に条件を設定し、
その条件はformula引数に記述した値に適用されます。

operator引数の条件は以下の通りです。

  • greaterThan:より大きい
  • greaterThanOrEqual:以上
  • lessThan:より小さい
  • lessThanOrEqual:以下
  • equal:等しい
  • notEqual:等しくない
  • between:値の間
  • notBetween:値の間以外

font、border、fillの各引数には条件を満たした際に設定する書式を
Fontオブジェクト等で設定します。

CellIsRuleオブジェクトを作成したら、どのセルに設定するのかを
Worksheetのconditional_formatting.addメソッドで設定してあげます。

ws.conditional_formatting.add('条件付き書式を設定するセルの範囲',
                              CellIsRule)

FormulaRuleオブジェクト

FormulaRule(formula=[数式],
            font=Fontオブジェクト,
            border=Borderオブジェクト,
            fill=PatternFillオブジェクト)

CellIsRuleオブジェクトに似ていますが
より詳細な条件指定や、行全体の書式変更時に使います。
数式を使用することが違うところでしょうか。

どのセルに設定するのかは、CellIsRuleオブジェクトの時と同様
Worksheetのconditional_formatting.addメソッドで設定してあげます。

最終的なコード

from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill
from openpyxl.formatting.rule import CellIsRule, FormulaRule

wb = load_workbook('商品リスト.xlsx')
ws = wb.active

# フォントの設定
blue_font = Font(color='0000ff', bold=True)

# セルの色を設定
gray_fill = PatternFill(bgColor='C0C0C0', fill_type='solid')

# フォントを変更する範囲と条件式
cell_rule = CellIsRule(operator='lessThanOrEqual',
                       formula=[0.55], font=blue_font)

# セルの色を変更する範囲と条件式
formula_rule = FormulaRule(formula=['$H3="業者B"'], fill=gray_fill)

ws.conditional_formatting.add('G3:G24', cell_rule)
ws.conditional_formatting.add('B3:H24', formula_rule)

wb.save('商品リスト_条件追加.xlsx')

余談①

今回、PatternFillオブジェクトのfill_type引数を「solid」にしていたので
fgColor='C0C0C0'と記述していたのです。
そうすると何故か、セルの色が白色になってしまったのです。

bgColor='C0C0C0'に変更すると指定通りの灰色になってくれました。

念のため、ほかのパターンも試してみましたが
そちらはちゃんと指定通りに色づけしてくれます。

今後は

PatternFill(fgColor='C0C0C0', bgColor='C0C0C0', fill_type='solid')

のように、どちらも同じ色を指定してあげると間違いがないようです。

余談②

条件付き書式はセルではなく、シートを対象に設定しています。
Excelの「ホーム」→「条件付き書式」→「ルールの管理」で確認する事が出来ます。

意外とこの設定、地味に面倒くさいのですよね・・・。
毎回だとなおさら。プログラムは偉大ですね。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?