formatting.rule【書式ルール】モジュール
メモ ( 概要 基本 行全体・列全体 注意事項 Rule【書式ルール】の設定項目 ) 例 関数
クラス: ColorScale【カラー スケール】 DataBar【データ バー】 FormatObject【値オブジェクト (条件付き書式)】 IconSet【アイコン セット】 Rule【書式ルール】 RuleType【値情報】 ValueDescriptor【値ディスクリプタ】
メモ
概要
- 条件付き書式の書式ルールに関連するモジュール
- Excelの [ホーム]タブ - [スタイル] - [条件付き書式] の書式ルールに対応
- Excelの [ホーム]タブ - [スタイル] - [条件付き書式] の書式ルールに対応
- モジュール内定義
- 関連モジュール
基本
〔 例 〕- Rule【書式ルール】を生成
- 詳細は、Rule【書式ルール】の設定項目
- 一部は、簡易生成関数 でも可
- Rule【書式ルール】をワークシートに追加
- Worksheet【ワークシート】 の conditional_formatting【条件付き書式リスト】プロパティ に add【書式ルール追加】 または ConditionalFormattingList[] =【書式ルール追加 操作】 で適用先セルを指定して追加
- 書式ルールの優先順位を省略した場合、先に追加した書式ルールが優先
- 追加後の書式ルールの管理: ConditionalFormattingList【条件付き書式リスト】 参照
行全体・列全体
〔 例 〕- 適用先セルと同一行 または 同一列 の別セルを参照し、行全体 または 列全体 に書式適用
- formula【数式リスト】で指定するセルアドレスの片方を、絶対アドレス (複合参照) で指定
注意事項
- 文字列関連等の書式ルールの数式は、仕様上は不要
- 但し、Excel で開く場合は必要 (Google スプレッドシートで開く場合は、未指定でも可)
- 詳細:数式※
- 単色塗りつぶしを使用時の色指定
- 書式の PatternFill【塗りつぶし (パターン)】 で 'solid'【塗りつぶし (単色)】指定の場合、
fgcolor・start_color【パターンの色】ではなく bgcolor・end_color【背景色】が使用される - 条件付き書式で使用する場合、両方に同一色を指定するのが無難
- 書式の PatternFill【塗りつぶし (パターン)】 で 'solid'【塗りつぶし (単色)】指定の場合、
Rule【書式ルール】の設定項目
セルの値に基づいてすべてのセルを書式設定〔 例 〕 | ||||
---|---|---|---|---|
ルール | type【ルールの種類】 | colorScale 【カラー スケール】 | dataBar 【データ バー】 | iconSet 【アイコン セット】 |
2 色スケール | 'colorScale'【カラー スケール】〔 例 〕 簡易生成関数:ColorScaleRule | ColorScale ( FormatObject ) | ||
3 色スケール | ||||
データ バー | 'dataBar'【データ バー】〔 例 〕 簡易生成関数:DataBarRule | DataBar ( FormatObject ) | ||
アイコン セット | 'iconSet'【アイコン セット】〔 例 〕 簡易生成関数:IconSetRule | IconSet ( FormatObject ) |
指定の値を含むセルだけを書式設定 | |||||
---|---|---|---|---|---|
ルール | type【ルールの種類】 | operator【条件演算子】 | formula 【数式リスト】 | その他 | dxf【差異スタイル】 |
セルの値が次の値の間 | 'cellIs'【セルの値】〔 例 〕 簡易生成関数:CellIsRule | 'between' 【次の値の間】 | 値1 値2 下記も可 ・絶対セルアドレス ・名前定義 | styles. DifferentialStyle | |
セルの値が次の値の間以外 | 'notBetween' 【次の値の間以外】 | ||||
セルの値が次の値に等しい | 'equal' 【次の値に等しい】 | 値 下記も可 ・絶対セルアドレス ・名前定義 | |||
セルの値が次の値に等しくない | 'notEqual' 【次の値に等しくない】 | ||||
セルの値が次の値より大きい | 'greaterThan' 【次の値より大きい】 | ||||
セルの値が次の値より小さい | 'lessThan' 【次の値より小さい】 | ||||
セルの値が次の値以上 | 'greaterThanOrEqual' 【次の値以上】 | ||||
セルの値が次の値以下 | 'lessThanOrEqual' 【次の値以下】 | ||||
特定の文字列を含む | 'containsText'〔 例 〕 【次の値を含む】 | 'containsText' 【次の値を含む】 | 数式 (含む) ※ | text 【比較文字列】 | |
特定の文字列を含まない | 'notContainsText'〔 例 〕 【次の値を含まない】 | 'notContains' 【次の値を含まない】 | 数式 (含まない) ※ | ||
特定の文字列で始まる | 'beginsWith'〔 例 〕 【次の値で始まる】 | 'beginsWith' 【次の値で始まる】 | 数式 (始まる) ※ | ||
特定の文字列で終わる | 'endsWith'〔 例 〕 【次の値で終わる】 | 'endsWith' 【次の値で終わる】 | 数式 (終わる) ※ | ||
日付 | 'timePeriod'〔 例 〕 【日付】 | timePeriod 【日付期間】 | |||
空白 | 'containsBlanks'〔 例 〕 【空白】 | 数式 (空白) ※ | |||
空白なし | 'notContainsBlanks'〔 例 〕 【空白なし】 | 数式 (空白なし) ※ | |||
エラー | 'containsErrors'〔 例 〕 【エラー】 | 数式 (エラー) ※ | |||
エラーなし | 'notContainsErrors'〔 例 〕 【エラーなし】 | 数式 (エラーなし) ※ | |||
※ 数式 OOXML(Office Open XML) の仕様上は必要ないが、Excel で開くと動作しない為、下記を指定 (Google スプレッドシートは不要) text text【比較文字列】と同じ文字列 textの文字数 上記の文字数 セルアドレス 適用先の左上セルアドレス | |||||
数式 (含む) | ' NOT(ISERROR(SEARCH("text", セルアドレス))) ' | ||||
数式 (含まない) | ' ISERROR(SEARCH("text", セルアドレス)) ' | ||||
数式 (始まる) | ' LEFT(セルアドレス, textの文字数)="text" ' | ||||
数式 (終わる) | ' RIGHT(セルアドレス, textの文字数)="text" ' | ||||
数式 (空白) | ' NOT(ISERROR(SEARCH("", セルアドレス))) ' | ||||
数式 (空白なし) | ' ISERROR(SEARCH("", セルアドレス)) ' | ||||
数式 (エラー) | ' ISERROR(セルアドレス) ' | ||||
数式 (エラーなし) | ' NOT(ISERROR(セルアドレス)) ' |
上位または下位に入る値だけを書式設定 | |||||
---|---|---|---|---|---|
ルール | type【ルールの種類】 | rank 【順位】 | bottom 【下位指定】 | percent 【パーセント指定】 | dxf【差異スタイル】 |
上位 (件数) | 'top10'〔 例 〕 【上位 / 下位】 | 件数 | 省略 / False | 省略 / False | styles. DifferentialStyle |
上位 (パーセンテージ) | パーセンテージ | 省略 / False | True | ||
下位 (件数) | 件数 | True | 省略 / False | ||
下位 (パーセンテージ) | パーセンテージ | True | True |
平均より上または下の値だけを書式設定 | |||||
---|---|---|---|---|---|
ルール | type【ルールの種類】 | aboveAverage 【平均より上】 | equalAverage 【平均値を含む】 | stdDev 【平均値の上下に含める標準偏差の数】 | dxf【差異スタイル】 |
平均より上 | 'aboveAverage'〔 例 〕 【平均より上 / 下】 | 省略 / True | 省略 / False | styles. DifferentialStyle | |
平均より下 | False | 省略 / False | |||
平均以上 | 省略 / True | True | |||
平均以下 | False | True | |||
平均より 1 標準偏差上 | 省略 / True | 1 | |||
平均より 1 標準偏差下 | False | 1 | |||
平均より 2 標準偏差上 | 省略 / True | 2 | |||
平均より 2 標準偏差下 | False | 2 | |||
平均より 3 標準偏差上 | 省略 / True | 3 | |||
平均より 3 標準偏差下 | False | 3 |
一意の値または重複する値だけを書式設定 | |||
---|---|---|---|
ルール | type【ルールの種類】 | dxf【差異スタイル】 | |
重複 | 'duplicateValues'【重複】〔 例 〕 | styles. DifferentialStyle | |
一意 | 'uniqueValues'【一意】〔 例 〕 |
数式を使用して、書式設定するセルを決定 | |||
---|---|---|---|
ルール | type【ルールの種類】 | formula【数式リスト】 | dxf【差異スタイル】 |
数式 | 'expression'【数式】〔 例 〕 簡易生成関数:FormulaRule | 結果が true/false となる数式 適用先セルを参照する場合は、適用先の左上セルアドレスを指定 行全体・列全体 も参照 | styles. DifferentialStyle |
外部リンク
- openpyxl (英語)
- ECMA-376:Office Open XML file formats (英語)
SpreadsheetML:- cfRule (Conditional Formatting Rule)
- cfvo (Conditional Format Value Object)
- colorScale (Color Scale)
- dataBar (Data Bar)
- iconSet (Icon Set)
- ST_CfType (Conditional Format Type)
- ST_CfvoType (Conditional Format Value Object Type)
- ST_ConditionalFormattingOperator (Conditional Format Operators)
- ST_TimePeriod (Time Period Types)
関数
関数 | 備考 | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CellIsRule( operator=None, formula=None, stopIfTrue=None, font=None, border=None, fill=None) | 書式ルール生成 (セルの値) 参考:通常生成 戻り値 (Rule) 書式ルール (styles.DifferentialStyle【差異スタイル】設定) operator (str)条件演算子
stopIfTrue (bool)[条件を満たす場合は停止] 設定有無 font (Font)フォント border (Border)罫線 fill (GradientFill | PatternFill)塗りつぶし (注意事項 参照) ![]() | |||||||||||||||||||
ColorScaleRule( start_type=None, start_value=None, start_color=None, mid_type=None, mid_value=None, mid_color=None, end_type=None, end_value=None, end_color=None) | 書式ルール生成 (カラー スケール) 参考:通常生成 戻り値 (Rule)書式ルール (ColorScale【カラー スケール】設定) start_type (str)値の種類 (最小値) start_value値 (最小値) start_color (Color)色 (最小値) mid_type (str)値の種類 (中間値) mid_value値 (中間値) mid_color (Color)色 (中間値) end_type (str)値の種類 (最大値) end_value値 (最大値) end_color (Color)色 (最大値) ![]() | |||||||||||||||||||
DataBarRule( start_type=None, start_value=None, end_type=None, end_value=None, color=None, showValue=None, minLength=None, maxLength=None) | 書式ルール生成 (データ バー) 参考:通常生成 戻り値 (Rule)書式ルール (DataBar【データ バー】設定) start_type値の種類 (最小値) start_value最小値 end_type値の種類 (最大値) end_value最大値 color (Color)バーの色 showValue (bool)値の表示有無 ( [棒のみ表示]指定の逆 ) minLength (int)バーの長さの最小値 (%) [拡張] maxLength (int)バーの長さの最大値 (%) [拡張] 下記は未対応 ・塗りつぶし:塗りつぶし (単色) ・枠線:枠線 (実線)・色 ・横の方向 ・[負の値と軸] ![]() | |||||||||||||||||||
FormulaRule( formula=None, stopIfTrue=None, font=None, border=None, fill=None) | 書式ルール生成 (数式) 参考:通常生成 戻り値 (Rule)書式ルール formula (list | tuple)数式リスト stopIfTrue (bool)[条件を満たす場合は停止] 設定有無 font (Font)フォント border (Border)罫線 fill (GradientFill | PatternFill)塗りつぶし (注意事項 参照) ![]() | |||||||||||||||||||
IconSetRule( icon_style=None, type=None, values=None, showValue=None, percent=None, reverse=None) | 書式ルール生成 (アイコン セット) 参考:通常生成 戻り値 (Rule)書式ルール (IconSet【アイコン セット】設定) icon_style (str)アイコン スタイル type (str)しきい値の種類 (共通) values (list | tuple)しきい値のリスト showValue (bool)値表示の有無 ( [アイコンのみ表示]指定の逆 ) percent reverse (bool)アイコンの逆順序指定 ( [アイコン順序を逆にする] ) 下記は未対応 ・>【しきい値を含まない指定】(通常生成 は可) ・しきい値の種類の個別指定 (通常生成 は可) ・アイコンスタイルのユーザ設定 ![]() |
ColorScale【カラー スケール】クラス
クラス定義
クラス | 備考 |
---|---|
親:RuleType【値情報】 | |
class ColorScale( cfvo=None, color=None) | カラー スケール (参照:該当のRule【書式ルール】の設定項目) cfvo (list | tuple)値オブジェクト リスト color (list | tuple)色リスト |
プロパティ
プロパティ | 型 | 備考 |
---|---|---|
cfvo | list[ FormatObject ] tuple( FormatObject ) | 値オブジェクト リスト (親クラスで定義) 下記を指定 ・最小値 ・中間値 (2色スケールは未指定) ・最大値 |
color | list[ Color ] tuple( Color ) | 色リスト (N色スケール:N個) |
tagname | str | タグ名 ('colorScale') |
DataBar【データ バー】クラス
クラス定義
クラス | 備考 |
---|---|
親:RuleType【値情報】 | |
class DataBar( minLength=None, maxLength=None, showValue=None, cfvo=None, color=None) | データ バー (参照:該当のRule【書式ルール】の設定項目) (参考関数:DataBarRule【書式ルール生成 (データ バー)】) minLength (int)バーの長さの最小値 (%) [拡張] maxLength (int)バーの長さの最大値 (%) [拡張] showValue (bool)値の表示有無 ( [棒のみ表示]指定の逆 ) cfvo (list | tuple)値オブジェクト リスト color (Color)バーの色 下記は未対応 ・塗りつぶし:塗りつぶし (単色) ・枠線:枠線 (実線)・色 ・横の方向 ・[負の値と軸] |
プロパティ
プロパティ | 型 | 備考 |
---|---|---|
cfvo | list[ FormatObject ] tuple( FormatObject ) | 値オブジェクト リスト (親クラスで定義) 下記を指定 ・最小値 ・最大値 |
color | Color | バーの色 |
maxLength | int | バーの長さの最大値 (%) [拡張:Excel では設定不可] |
minLength | int | バーの長さの最小値 (%) [拡張:Excel では設定不可] |
showValue | bool | 値の表示有無 ( [棒のみ表示]指定の逆 ) |
tagname | str | タグ名 ('dataBar') |
FormatObject【値オブジェクト (条件付き書式)】クラス
クラス定義
プロパティ
プロパティ | 型 | 備考 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
extLst | ExtensionList | 拡張リスト | ||||||||||||||
gte | bool | 以上指定 (アイコン セットで有効) True:>=【以上】 False:>【より大きい】 (Greater Than Or Equal) | ||||||||||||||
tagname | str | タグ名 ('cfvo') | ||||||||||||||
type | str | 値の種類
| ||||||||||||||
val | str float (ValueDescriptor) | 値 str: type【値の種類】が 'formula'【 数式】 または セルアドレス float 変換: その他 |
IconSet【アイコン セット】クラス
クラス定義
クラス | 備考 |
---|---|
親:RuleType【値情報】 | |
class IconSet( iconSet=None, showValue=None, percent=None, reverse=None, cfvo=None) | アイコン セット (参照:該当のRule【書式ルール】の設定項目) iconSet (str)アイコン スタイル showValue (bool)値表示の有無 ( [アイコンのみ表示]指定の逆 ) percent (bool) reverse (bool)アイコンの逆順序指定 ( [アイコン順序を逆にする] ) cfvo値オブジェクト リスト 下記は未対応 ・アイコンスタイルのユーザ設定 |
プロパティ
プロパティ | 型 | 備考 | ||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
cfvo | list[ FormatObject ] tuple( FormatObject ) | 値オブジェクト リスト (親クラスで定義) 下記を指定 (アイコン個数分) ・しきい値 | ||||||||||||||||||||||||||||||||||||||
iconSet | str | アイコン スタイル
| ||||||||||||||||||||||||||||||||||||||
percent | bool | |||||||||||||||||||||||||||||||||||||||
reverse | bool | アイコンの逆順序指定 ( [アイコン順序を逆にする] ) | ||||||||||||||||||||||||||||||||||||||
showValue | bool | 値表示の有無 ( [アイコンのみ表示]指定の逆 ) | ||||||||||||||||||||||||||||||||||||||
tagname | str | タグ名 ('iconSet') |
Rule【書式ルール】クラス
クラス定義
クラス | 備考 |
---|---|
親:openpyxl.descriptors.serialisable.Serialisable インポート:from openpyxl.formatting import Rule (省略形) | |
class Rule( type, dxfId=None, priority=0, stopIfTrue=None, aboveAverage=None, percent=None, bottom=None, operator=None, text=None, timePeriod=None, rank=None, stdDev=None, equalAverage=None, formula=(), colorScale=None, dataBar=None, iconSet=None, extLst=None, dxf=None) | 書式ルール (参照:Rule【書式ルール】の設定項目) type (str)ルールの種類 dxfId (int)差異スタイルId priority (int)ルールの優先順位 stopIfTrue (bool)[条件を満たす場合は停止] 設定有無 aboveAverage (bool)平均より上か下かの指定 percent (bool)パーセント指定有無 bottom (bool)下位指定有無 operator (str)条件演算子 text (str)比較文字列 timePeriod (str)日付期間 rank (int)順位 件数 / パーセンテージ stdDev (int)平均値の上下に含める標準偏差の数 equalAverage (bool)平均値を含む formula (list | tuple)数式リスト colorScale (ColorScale)カラー スケール dataBar (DataBar)データ バー iconSet (IconSet)アイコン セット extLst (ExtensionList)拡張リスト dxf (styles.DifferentialStyle)差異スタイル |
プロパティ
プロパティ | 型 | 備考 | ||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
aboveAverage | bool | 平均より上か下かの指定 | ||||||||||||||||||||||||||||||||||||||||||||||||||
bottom | bool | 下位指定有無 | ||||||||||||||||||||||||||||||||||||||||||||||||||
colorScale | ColorScale | カラー スケール | ||||||||||||||||||||||||||||||||||||||||||||||||||
dataBar | DataBar | データ バー | ||||||||||||||||||||||||||||||||||||||||||||||||||
dxf | styles.DifferentialStyle | 差異スタイル | ||||||||||||||||||||||||||||||||||||||||||||||||||
dxfId | int | 差異スタイルId | ||||||||||||||||||||||||||||||||||||||||||||||||||
equalAverage | bool | 平均値を含む | ||||||||||||||||||||||||||||||||||||||||||||||||||
extLst | ExtensionList | 拡張リスト | ||||||||||||||||||||||||||||||||||||||||||||||||||
formula | list[ str ] tuple( str ) str に変換可能な型も可 list[ int ] 等 | 数式リスト (指定値は Rule【書式ルール】の設定項目・数式※ を参照) | ||||||||||||||||||||||||||||||||||||||||||||||||||
iconSet | IconSet | アイコン セット | ||||||||||||||||||||||||||||||||||||||||||||||||||
operator | str | 条件演算子
| ||||||||||||||||||||||||||||||||||||||||||||||||||
percent | bool | パーセント指定有無 (選択範囲に占める割合) | ||||||||||||||||||||||||||||||||||||||||||||||||||
priority | int (1~) | ルールの優先順位 (1:最優先) | ||||||||||||||||||||||||||||||||||||||||||||||||||
rank | int | 順位 (件数 / パーセンテージ) | ||||||||||||||||||||||||||||||||||||||||||||||||||
stdDev | int | 平均値の上下に含める標準偏差の数 | ||||||||||||||||||||||||||||||||||||||||||||||||||
stopIfTrue | bool | [条件を満たす場合は停止] 設定有無 | ||||||||||||||||||||||||||||||||||||||||||||||||||
tagname | str | タグ名 ('cfRule') | ||||||||||||||||||||||||||||||||||||||||||||||||||
text | str | 比較文字列 | ||||||||||||||||||||||||||||||||||||||||||||||||||
timePeriod | str | 日付期間
| ||||||||||||||||||||||||||||||||||||||||||||||||||
type | str | ルールの種類 (設定が必要な項目は、Rule【書式ルール】の設定項目 を参照)
|
RuleType【値情報】クラス
メモ
クラス定義
クラス | 備考 |
---|---|
親:openpyxl.descriptors.serialisable.Serialisable | |
class RuleType( ) | 値情報 |
プロパティ
プロパティ | 型 | 備考 |
---|---|---|
cfvo | list[ FormatObject ] tuple( FormatObject ) | 値オブジェクト リスト |
ValueDescriptor【値ディスクリプタ】クラス
メモ
- FormatObject【値オブジェクト (条件付き書式)】の val【値】プロパティで使用
クラス定義
クラス | 備考 |
---|---|
親:openpyxl.descriptors.base.Float | |
class ValueDescriptor( ) | 値ディスクリプタ |
操作
操作 | 備考 |
---|---|
設定 | str: type【値の種類】が 'formula'【 数式】 または セルアドレス float 変換: その他 |
例
基本
from openpyxl import Workbook
from openpyxl.formatting import Rule
from openpyxl.styles.differential import DifferentialStyle
from openpyxl.formatting.rule import CellIsRule
from openpyxl.styles import PatternFill, fills
from openpyxl.styles import Font
# データ設定
data = [1, 10, 3, 8, 5, 6, 7, 4, 9, 2]
def set_data(row, col):
for value in data:
ws.cell(row, col, value)
row += 1
# ワークブック作成
WORKBOOK = 'sample.xlsx'
wb = Workbook()
ws = wb.active
font = Font(bold=True, color='FFFFFFFF')
fill = PatternFill(fills.FILL_SOLID, 'FF0000FF', 'FF0000FF')
dxf = DifferentialStyle(
font=font,
fill=fill,
)
# 通常生成 (次の値以上:即値)
ws['B2'] = '次の値以上 (即値)'
ws['B3'] = '通常生成'
rule = Rule(
type='cellIs',
operator='greaterThanOrEqual',
formula=[5],
dxf=dxf,
)
ws.conditional_formatting.add('B5:B14', rule)
set_data(5, 2)
# 簡易生成 (次の値以上:即値)
ws['C3'] = '簡易生成'
rule = CellIsRule(
operator='>=',
formula=[5],
font=font,
fill=fill,
)
ws.conditional_formatting.add('C5:C14', rule)
set_data(5, 3)
# セル参照
CELL_VALUE_1 = '$D$4'
CELL_VALUE_2 = '$E$4'
NAME_VALUE_2 = 'value_2'
ws[CELL_VALUE_1] = 3
ws[CELL_VALUE_2] = 6
wb.create_named_range(NAME_VALUE_2, ws, CELL_VALUE_2)
# 通常生成 (次の値の間:絶対セルアドレス・名前定義)
ws['D2'] = '次の値の間 (セル参照)'
ws['D3'] = '通常生成'
rule = Rule(
type='cellIs',
operator='between',
formula=[CELL_VALUE_1, NAME_VALUE_2],
dxf=dxf,
)
ws.conditional_formatting.add('D5:D14', rule)
set_data(5, 4)
print(rule)
# 出力:
# <openpyxl.formatting.rule.Rule object>
# Parameters:
# (一部省略)
# type='cellIs',
# priority=3,
# operator='between',
# formula=['$D$4', 'value_2']
# 簡易生成 (次の値以上:即値)
ws['E3'] = '簡易生成'
rule = CellIsRule(
operator='between',
formula=[CELL_VALUE_1, NAME_VALUE_2],
font=font,
fill=fill,
)
ws.conditional_formatting.add('E5:E14', rule)
set_data(5, 5)
print(rule)
# 出力:
# <openpyxl.formatting.rule.Rule object>
# Parameters:
# (一部省略)
# type='cellIs',
# priority=4,
# operator='between',
# formula=['$D$4', 'value_2']
# ワークブック保存
wb.save(WORKBOOK)
行全体・列全体
from openpyxl import Workbook
from openpyxl.formatting import Rule
from openpyxl.styles.differential import DifferentialStyle
from openpyxl.formatting.rule import FormulaRule
from openpyxl.styles import PatternFill, fills
from openpyxl.styles import Font
from openpyxl.utils import get_column_letter
# データ設定
data = [1, 10, 2, 9, 3, 8, 4, 7, 5, 6]
def set_data(row, col, vertical=True):
for value in data:
ws.cell(row, col, value)
if vertical:
row += 1
else:
col += 1
# ワークブック作成
WORKBOOK = 'sample.xlsx'
wb = Workbook()
ws = wb.active
font = Font(bold=True, color='FFFFFFFF')
fill = PatternFill(fills.FILL_SOLID, 'FF0000FF', 'FF0000FF')
dxf = DifferentialStyle(
font=font,
fill=fill,
)
for col in range(2, 12):
ws.column_dimensions[get_column_letter(col)].width = 5
# 通常生成 (数式)
ws['B2'] = '通常生成 (数式:3の倍数)'
ws['B3'] = '行全体'
rule = Rule(
type='expression',
formula=['MOD($D4,3)=0'],
dxf=dxf,
)
ws.conditional_formatting.add('B4:F13', rule)
set_data(4, 4)
# 簡易生成 (数式)
ws['B16'] = '簡易生成 (数式:3の倍数)'
ws['B17'] = '列全体'
rule = FormulaRule(
formula=['MOD(B$20,3)=0'],
font=font,
fill=fill,
)
ws.conditional_formatting.add('B18:K22', rule)
set_data(20, 2, False)
# ワークブック保存
wb.save(WORKBOOK)