formatting.formatting【書式】モジュール

メモ ( 概要 基本 )
クラス: ConditionalFormatting【条件付き書式】 ConditionalFormattingList【条件付き書式リスト】

メモ

概要

基本


ConditionalFormatting【条件付き書式】クラス

メモ

クラス定義

クラス備考
親:openpyxl.descriptors.serialisable.Serialisable
class ConditionalFormatting(
    sqref=(),
    pivot=None,
    cfRule=(),
    extLst=None )
条件付き書式
sqrefセル範囲
pivot (bool)
cfRule (list | tuple)書式ルールのリスト
extLst

プロパティ

プロパティ備考
cellsMultiCellRange
設定:str 可
sqref【適用先セル範囲】のエイリアス
cfRule list[ Rule ]
tuple( Rule )
書式ルールのリスト
pivotbool
rules list[ Rule ]
tuple( Rule )
cfRule【書式ルールのリスト】のエイリアス
sqrefMultiCellRange
設定:str 可
適用先セル範囲
tagnamestrタグ名 ('conditionalFormatting')

操作

操作備考
ConditionalFormatting_1 == ConditionalFormatting_2 適用先セル範囲アドレスで比較
hash( ConditionalFormatting )ハッシュ値 (適用先セル範囲アドレスから作成)
repr( ConditionalFormatting ) 印字可能文字列変換
<ConditionalFormatting 適用先セル範囲アドレス>
coord in ConditionalFormatting セル範囲判定
coord判定セル範囲アドレス

ConditionalFormattingList【条件付き書式リスト】クラス

メモ

クラス定義

クラス備考
親:object
class ConditionalFormattingList( ) 条件付き書式リスト

プロパティ

プロパティ備考
max_priorityint省略時の優先順位

操作

操作備考
bool( ConditionalFormattingList ) ConditionalFormatting【条件付き書式】 存在有無
len( ConditionalFormattingList ) ConditionalFormatting【条件付き書式】個数
for cf in ConditionalFormattingList: 繰り返し処理
cf (ConditionalFormatting)条件付き書式
ConditionalFormattingList [key] Rule【書式ルール】リスト取得
key適用先セル範囲アドレス
del ConditionalFormattingList [key] 書式ルール クリア
(ConditionalFormatting【条件付き書式】削除)
key適用先セル範囲アドレス
ConditionalFormattingList [key] = rule Rule【書式ルール】追加
(add【書式ルール追加】メソッドと同等)
key適用先セル範囲アドレス
rule (Rule)書式ルール

メソッド

メソッド備考
add(
    range_string,
    cfRule)
書式ルール追加
(ConditionalFormattingList[ ] =【書式ルール追加 操作】操作と同等)
range_string (str | ConditionalFormatting)
cfRule (Rule)書式ルール
※ ルールの優先順位を省略した場合、先に追加したルールが優先

基本

from openpyxl import Workbook
from openpyxl.formatting.rule import FormulaRule
from openpyxl.styles import PatternFill, fills
from openpyxl.styles import Font

# データ設定
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
def set_data(row, col):
    for value in data:
        ws.cell(row, col, value)
        row += 1

# 書式ルール追加 (倍数)
def add_rule(mod, color, sqref):
    cell = sqref.split(':')[0]
    rule = FormulaRule(
        formula=[f'MOD({cell},{mod})=0'],
        font=font,
        fill=PatternFill(fills.FILL_SOLID, color, color)
    )
    ws.conditional_formatting.add(sqref, rule)  # 書式ルール追加 (方法1)
    # ws.conditional_formatting[sqref] = rule  # 書式ルール追加 (方法2)
    return rule


# ワークブック作成
WORKBOOK = 'sample.xlsx'
wb = Workbook()
ws = wb.active

# 初期設定
font = Font(bold=True, color='FFFFFFFF')
ws.column_dimensions['B'].width = 15
ws.column_dimensions['C'].width = 15
ws.column_dimensions['D'].width = 15
ws.column_dimensions['E'].width = 15

# 2・3・4の倍数
ws['B2'] = '2・3・4の倍数'
set_data(3, 2)
print(bool(ws.conditional_formatting))
# 出力:
RANGE_1 = 'B3:B14'
add_rule(2, 'FF0000FF', RANGE_1)
add_rule(3, 'FF00FF00', RANGE_1)
add_rule(4, 'FFFF0000', RANGE_1)
if ws.conditional_formatting:
    print(len(ws.conditional_formatting))
# 出力:1

# 4・3・2の倍数
ws['C2'] = '4・3・2の倍数'
set_data(3, 3)
RANGE_2 = 'C3:C14'
rule_2 = add_rule(2, 'FF0000FF', RANGE_2)
add_rule(3, 'FF00FF00', RANGE_2)
rule_4 = add_rule(4, 'FFFF0000', RANGE_2)
# 優先順位 入れ替え
rule_2.priority, rule_4.priority = rule_4.priority, rule_2.priority

# 3・4の倍数
ws['D2'] = '3・4の倍数'
set_data(3, 4)
RANGE_3 = 'D3:D14'
rule_2 = add_rule(2, 'FF0000FF', RANGE_3)
add_rule(3, 'FF00FF00', RANGE_3)
add_rule(4, 'FFFF0000', RANGE_3)
cf = ws.conditional_formatting[RANGE_3]
print(cf)
# 出力:
# [
# <openpyxl.formatting.rule.Rule object>
# Parameters:
# priority=7, formula=['MOD(D3,2)=0'], (一部省略)
#
# <openpyxl.formatting.rule.Rule object>
# Parameters:
# priority=8, formula=['MOD(D3,3)=0'], (一部省略)
#
# <openpyxl.formatting.rule.Rule object>
# Parameters:
# priority=9, formula=['MOD(D3,4)=0'] (一部省略)
# ]
# 2の倍数ルール 削除
cf.remove(rule_2)
print(cf)
# 出力:
# [
# <openpyxl.formatting.rule.Rule object>
# Parameters:
# priority=8, formula=['MOD(D3,3)=0'], (一部省略)
#
# <openpyxl.formatting.rule.Rule object>
# Parameters:
# priority=9, formula=['MOD(D3,4)=0'] (一部省略)
# ]

# 書式ルールクリア
ws['E2'] = '書式ルールクリア'
set_data(3, 5)
RANGE_4 = 'E3:E14'
add_rule(2, 'FF0000FF', RANGE_4)
add_rule(3, 'FF00FF00', RANGE_4)
add_rule(4, 'FFFF0000', RANGE_4)
print(len(ws.conditional_formatting))
# 出力:4
for cf in ws.conditional_formatting:
    print(cf)
    print('C10' in cf, 'C6:C9' in cf)
# 出力:
# <ConditionalFormatting B3:B14>
# False False
# <ConditionalFormatting C3:C14>
# True True
# <ConditionalFormatting D3:D14>
# False False
# <ConditionalFormatting E3:E14>
# False False
del ws.conditional_formatting[RANGE_4]
print(len(ws.conditional_formatting))
# 出力:3
for cf in ws.conditional_formatting:
    print(cf)
# 出力:
# <ConditionalFormatting B3:B14>
# <ConditionalFormatting C3:C14>
# <ConditionalFormatting D3:D14>

# ワークブック保存
wb.save(WORKBOOK)

ConditionalFormattingList【条件付き書式リスト】のサンプル画像