formatting.formatting【書式】モジュール
メモ ( 概要 基本 ) 例
クラス: ConditionalFormatting【条件付き書式】 ConditionalFormattingList【条件付き書式リスト】
メモ
概要
- 条件付き書式に関連するモジュール
- Excelの [ホーム]タブ - [条件付き書式] - [条件付き書式ルールの管理] に対応
- Excelの [ホーム]タブ - [条件付き書式] - [条件付き書式ルールの管理] に対応
- モジュール内定義
- 関連モジュール
基本
〔 例 〕- ConditionalFormattingList【条件付き書式リスト】は、 Worksheet【ワークシート】 の conditional_formatting【条件付き書式リスト】プロパティ に実装
- Rule【書式ルール】を追加すると、 同一セル範囲毎に ConditionalFormatting【条件付き書式】で管理
- 以降、優先順位の変更 等の操作が可能
外部リンク
- openpyxl (英語)
- ECMA-376:Office Open XML file formats (英語)
SpreadsheetML:- conditionalFormatting (Conditional Formatting)
ConditionalFormatting【条件付き書式】クラス
メモ
- 同一セル範囲毎に書式ルールを管理
- ConditionalFormattingList【条件付き書式リスト】 に Rule【書式ルール】を追加すると、自動的に生成
クラス定義
プロパティ
操作
操作 | 備考 |
---|---|
ConditionalFormatting_1 == ConditionalFormatting_2 | 適用先セル範囲アドレスで比較 |
hash( ConditionalFormatting ) | ハッシュ値 (適用先セル範囲アドレスから作成) |
repr( ConditionalFormatting ) | 印字可能文字列変換 <ConditionalFormatting 適用先セル範囲アドレス> |
coord in ConditionalFormatting | セル範囲判定 coord判定セル範囲アドレス |
ConditionalFormattingList【条件付き書式リスト】クラス
メモ
- Worksheet【ワークシート】 の conditional_formatting【条件付き書式リスト】プロパティ で使用
- ConditionalFormatting【条件付き書式】を管理
- ConditionalFormatting【条件付き書式】は同一セル範囲毎に Rule【書式ルール】を管理
クラス定義
クラス | 備考 |
---|---|
親:object | |
class ConditionalFormattingList( ) | 条件付き書式リスト |
プロパティ
プロパティ | 型 | 備考 |
---|---|---|
max_priority | int | 省略時の優先順位 |
操作
操作 | 備考 |
---|---|
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)