pythonを使用してExcelファイルの操作を勉強しています。
本日の気づき(復習)は、条件付き書式に関してです。
pythonでExcelを操作するため、openpyxlというパッケージを使用しています。
上記のようなブック「商品リストを」
この様な表に変更したいです。
ここでのポイントは
- 原価率が55%以下の場合は文字を青色に変更
- 製造元が業者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の「ホーム」→「条件付き書式」→「ルールの管理」で確認する事が出来ます。
意外とこの設定、地味に面倒くさいのですよね・・・。
毎回だとなおさら。プログラムは偉大ですね。