【Python×Excel】openpyxlでセルに書式設定(フォント・塗り潰し・罫線)する方法【前編】

スポンサーリンク
Python外部ライブラリ(openpyxl)➂ openpyxl

Japanese | English

今回も引き続き、Pythonから「Excel」を操作する「openpyxl」ライブラリを紹介していきます。

前回の記事では、「Cellオブジェクトの追加・取得に関する各種メソッドやプロパティ」について解説しました。さらに、「値や数式を設定する」「複数のセルを結合する」「セルの範囲に名前を付けて管理する」方法について説明しました。

Excel作業は、すべてセル(Cellオブジェクト)に対する操作が基本になります。ぜひ、以下の関連記事も参照になさってください。


セルに数値や文字列といった値を設定したり、取得することができるようになりました。ですが、単調に羅列されたデータだけでは味気ない寂しいコンテンツとなりがちです。

そうならないために次に検討することは、セルの書式を見栄え良く、整えて第三者にも直感的に分かりやすい資料作りをしていくことだと思います。

そこで、連載3回目となる今回は、セルに「フォントや塗りつぶし罫線」といった装飾を。つまり「セルに書式(スタイル)を設定」する方法を取り上げます。

openpyxlにはもちろん、セルの書式設定に関するモジュールやクラスも豊富に用意されており、容易に対応ができます。

但し、セルの書式に関する設定項目は多岐にわたるため記事を2回に分けて解説していきます。

前編にあたる本記事では、セルに書式を設定するためのプロパティと「フォント」・「塗り潰し」・「罫線」を管理する各種オブジェクトについて解説します。

そして次回の後編では、セルの「配置の指定」と「表示形式」、そして各種オブジェクトを組み合わせてユーザーが独自のスタイルにカスタマイズする方法(「スタイルの名前付き定義」)について取り上げます。

その他、本連載【Python×Excel】の全体コンテンツはこちらのようになっていますので、参考にして下さい。

openpyxl_目次_完結版_rev0.1
図1. 連載【Python×Excel】のコンテンツ一覧

この記事を読むことで、次のようなことが「できるわかる」ようになりますので最後までお付き合いください。

What you will learn in this article

以下、セル書式に関してExcel設定ウィンドウと比較しながら解説します。

➀. フォントを管理する「Fontオブジェクト」について

➁. セルの塗り潰し効果に関する「Fillオブジェクト」について

➂. セルの罫線を管理する「Borderオブジェクト」について

本サイトでの紹介内容は一例です。また、関数などの省略可能なオプション引数などについては割愛していますので、詳細や不明点などは必要に応じて公式サイトなどを参照してください。

【公式サイト】:https://openpyxl.readthedocs.io/en/stable/

それでは、次節より「書式設定に関するオブジェクトの定義方法」について詳しく解説していきます。

スポンサーリンク

1. セルに書式を設定する

本節では、個々のセル(Cellオブジェクト)にフォントなどの書式を設定する方法を解説します。

Excelの「セルの書式設定ダイアログ」(図2)にあるほぼ全ての項目に対応ができます。

<セルの書式>

表示形式配列フォント罫線塗り潰し保護

セルの書式ダイアログ(一覧)
図2. Excelのセルの書式設定ダイアログ

それぞれの書式には、専用のオブジェクト(クラス)が用意されています。対象セルに対して、オブジェクトを設定(プロパティ)することで、書式(スタイル)が適用されます。(図3)

openpyxl_セルの書式の設定の概略_rev0.2
図3. セルに書式オブジェクトを適用

以降からは、各クラスからオブジェクトを生成 (コンストラクタ)する際に、指定する「引数」や「オブション定数」について解説していきます。

1.1 フォント(Fontオブジェクト)の設定

フォントに関する設定(フォントタイプ、サイズ、色など)は Fontクラス から生成する Fontオブジェクト で定義・管理されます。それをCellオブジェクトの fontプロパティ で設定することで、適用できます。引数にはさまざまなものがありますが、主なものを示します。

Fontオブジェクト

from openpyxl.styles import Font

Font(name, size, bold, italic, vertAlign, underline, strike, color)


引数: name : フォント名を設定する(デフォルト: ‘Calibri‘)

引数: size : 文字サイズを設定する(デフォルト: 11)

引数: bold : 太文字にする(デフォルト: False)

引数: italic : 斜体文字にする(デフォルト: False)

引数: vertAlign : 文字の位置(デフォルト: None) ‘subscript’, ‘baseline’, ‘superscript’から選択

引数: underline : 下線を引く(デフォルト: None) ‘singleAccounting’, ‘double’, ‘doubleAccounting’, ‘single’から選択

引数: strike : 打消し線を引く(デフォルト: False)

引数: color : 文字色を設定する(デフォルト: ‘FF000000‘)

戻り値: Fontオブジェクト

※引数は全てオプショナル引数

セルの書式設定ウィンドウ(フォントTab)で設定することができる項目はほぼカバーされています。図4は、それぞれの引数がどのUI項目に対応しているかを対比しています。

セルの書式ダイアログ(フォント)
図4. 書式設定ウィンドウ(フォント)

クラスの引数について補足をします。

引数:name には’ Meiryo UI’,’ MS ゴシック’などの日本語を含む文体フォント名を文字列で指定します。フォント名にはスペースを含むものがありますが、必ず半角スペースで指定します。

また、引数:vertAlign(文字配置(縦方向))や 引数:underline (下線)は図5に示すような既定オプション(Enum)の中からします。

セルの書式ダイアログ(Font)_引数オプション
図5. underline引数とvertAlign引数のオプション定数(Enum)

文字色の情報は、引数:color にて設定します。指定方法は2通りあって、1つが「αRGB方式」で、透明度,赤,青,緑の情報をHex(16進)表記の文字列(例:赤色00FF0000 明度は‘00’のみ)を渡します。

そして、2つ目が、Colorクラスから取得するオブジェクトを設定する方法です。

openpyxlには、既定の色情報が組み込まれていて、「インデックス」や「テーマカラー」を選ぶことができます。インデックスは、以下、公式ドキュメントも参考にして下さい。

ただ、アプリケーションに依存するので、公式サイトでは「αRGB方式」の使用を推奨しています。

Colorクラスのインデックス指定一覧

https://openpyxl.readthedocs.io/en/stable/styles.html#colours

SAMPLE(1)

セルにフォントの書式(Fontオブジェクト)を適用するコード例を<List1>に示します。

コードの概要は、「文字のフォント(文体)を設定」(A※)、「フォントサイズを設定」(B)、「文字の配置位置の設定」(C)、「下線を設定」(D)そして、その他「取り消し線・太字・斜体の設定」(E)を各セルに対しておこなっています。

※(A)などの記号は、コード内のコメントに対応しています。

from openpyxl import Workbook
from openpyxl.styles import Font   # Fontクラスをインポート

wb = Workbook()
ws = wb.active

#(A)---------------------------------------------------------------------------------------
# フォント名(種類)の設定

ws["A1"].value = '【フォント名】'
range = ws["B3":"E4"]

#フォント名の設定値 「Arial,MS Pゴシック,Century,BIZ UDPゴシック」を指定
font_name = ['Arial', 'MS Pゴシック', 'Century', 'BIZ UDPゴシック']

for cell_1, cell_2, name in zip(range[0], range[1], font_name):
    cell_1.value = name            # セルに値(オプション定数)をセット
    cell_2.value = '神奈川県'      # セルに値をセット
    cell_2.font = Font(name=name)  # Fontオブジェクト(フォント名(種類))を適用する


#(B)---------------------------------------------------------------------------------------
# フォントサイズの設定

ws["A6"].value = '【フォントサイズ】'
range = ws["B8":"D9"]

#フォントサイズの設定値(ポイント) 「8, 11, 12.5ポイント」を指定
font_size = [8, 11, 12.5]

for cell_1, cell_2, size in zip(range[0], range[1], font_size):
    cell_1.value = size
    cell_2.value = '川崎市'
    cell_2.font = Font(size=size)  # Fontオブジェクト(フォントのサイズ)を適用する
    

#(C)---------------------------------------------------------------------------------------
# 文字の配置(縦方向)の設定

ws["A11"].value = '【文字の高さ】'
range = ws["B13":"D14"]

# 文字の配置位置の設定値 「下限(subscript)、中央、上限(superscript)」を指定
font_vertAlign = ['subscript', 'baseline', 'superscript']

for cell_1, cell_2, align in zip(range[0], range[1], font_vertAlign):
    cell_1.value = align
    cell_2.value = '横浜市'
    cell_2.font = Font(vertAlign=align)  # Fontオブジェクト(配置位置「高さ」)を適用する


#(D)---------------------------------------------------------------------------------------
#アンダーライン(下線)の設定

ws["A16"].value = '【下線の設定】'
range = ws["B18":"E19"]

# 下線の設定値 「一重線(single), 二重線(double)…」を指定
font_underline = ['singleAccounting', 'double', 'doubleAccounting', 'single']

for cell_1, cell_2, line in zip(range[0], range[1], font_underline):
    cell_1.value = line
    cell_2.value = '相模原市'
    cell_2.font = Font(underline=line)  # Fontオブジェクト(下線)を適用する


#(E)---------------------------------------------------------------------------------------
#その他の設定(取り消し線・太字・斜体)

ws["H1"].value = '【その他(取り消し・太字・斜体)の設定】'
ws["I3"].value = '横須賀市'

# 下線と太字、斜体を有効にし、文字色を変更して、
# Fontオブジェクトを作成しセルに適用する。
ws["I3"].font = Font(size=12, strike=True, bold=True, italic=True, color='FF0F0F')


wb.save('styles_Font.xlsx')

<List1>を実行した結果は以下のようになりました。

(C)(D)のオプション定数は全てのパターンで確認していますので参考にしてください。

このプログラムの実行結果は以下からダウンロードできます。

Fontオブジェクト適用例
図6. List1の実行結果

以上が、フォントに関する書式設定でした。次項はセルに塗りつぶし(網掛)効果を適用する方法について解説します。

1.2 塗りつぶし(Fillオブジェクト)の設定

セルに色やパターン(模様・ハッチング)を施すには PatternFillクラス、または GradientFillクラス からオブジェクトを定義し生成します。そして、対象のCellオブジェクトの fillプロパティ で、それらを適用させます。

2つのクラスの使い分けは、模様パターン(単色)でセルを塗りつぶす場合には PatternFillオブジェクト を適用し、2階調以上の色でグラデーションさせたい場合には GradientFillオブジェクト を適用します。以降で、詳しく解説します。

1.2.1 パターン塗りつぶし効果 (PatternFill)

セルに模様パターンを施すには、PatternFillクラス に次の書式のような引数指定をして、オブジェクトを定義・生成します

PatternFillオブジェクト

from openpyxl.styles import PatternFill

PatternFill(pattern_type, fgColor, bgColor, start_color, end_color)


引数: patternType : 塗りつぶしパターンを設定する(デフォルト:None) 18種類のパターン定数を指定する

引数: fgColor : 前景色を設定する

引数: bgColor : 背景色を設定する

引数: start_color : 色1を設定する(デフォルト:’00000000‘) 前景色を設定するのと同義

引数: end_color : 色2を設定する(デフォルト:’00000000) 背景色を設定するのと同義

戻り値: PatternFillオブジェクト

※引数は全てオプショナル引数

セルの書式設定ウィンドウ(塗りつぶしTab)で設定できる項目をカバーしています。図7は、それぞれの引数がどのUI項目に対応するかを示しています。

引数:patternType には、塗りつぶすパターンを既定オプション(Enum)から選択します。例えば、単色で塗りつぶすのであれば ‘solid’を指定し、ドットや縞模様などでパターンを施す場合は’gray125’、

,’darkHorizontal’などを指定します。組込みパターンは全18種類が用意されています。この後の、サンプルコードで、全パターンを適用例を紹介しています。

パターンの色は、前景色と背景色で個別に設定します。それぞれ 引数:fgColor引数:bgColor にαRGB形式、もしくはColorオブジェクトを設定します。(フォント書式と同様)

また、前景色・背景色は 引数:start_color引数:end_color でも指定することができます。同時に指定した場合には、後者が優先されるようです。

セルの書式ダイアログ(PatternFill)
図7. セルの書式指定(パターン塗りつぶし)

SAMPLE(2)

ここで、PatternFillオブジェクト による、パターン設定例をサンプルコードで確認してみましょう。<List2>

コードの概要は、(A※)で 引数:patternType で組込みパターン18種類すべてを適用、確認しています。(B)では前景色と背景色を個別または、同時に設定しています。パターン(模様線)が前景色(fgColor/start_color)に該当します。

※(A)などの記号は、コード内のコメントに対応しています。

from openpyxl import Workbook
from openpyxl.styles import PatternFill, GradientFill    # PatternFillクラスをインポート

wb = Workbook()
ws = wb.active

# 複数個のCellオブジェクトを取得(Range)
range = ws.iter_cols(min_row=2, max_row=20, min_col=2, max_col=3)

# pattern_typeに指定可能なオプション定数一覧
fill_pattern = ['solid', 'lightGray','gray125', 'gray0625', 'mediumGray', 'darkGray',
               'darkUp', 'lightTrellis', 'darkHorizontal', 'lightHorizontal', 'darkGrid',
               'lightUp', 'darkDown', 'darkTrellis', 'lightGrid', 'lightVertical', 'lightDown', 'darkVertical']

# (A)------------------------------------------------------------------------------------------------------------
# 全パターン一覧を表示する

for col in range:
    for cell, pattern in zip(col, fill_pattern): # zip関数でアンパック
        
        if cell.col_idx == 2 :      # 'B'列の場合はオプション定数の値を表示する
            cell.value = pattern
        else:                       # 'C'列の場合は塗りつぶし(パターン)を適用する
            cell.fill = PatternFill(patternType=pattern)  # PatternFillオブジェクトをfillプロパティで設定する

# (B)------------------------------------------------------------------------------------------------------------
# 前景色と背景色を設定する

# (1)前景色(fgColor)を指定
ws['F2'].fill = PatternFill(patternType='lightGrid', fgColor="FF0000")

# (2)背景色(gbColor)を指定
ws['F4'].fill = PatternFill(patternType='lightGrid', bgColor="FF0000")

# (3)前景色と背景色を指定➀
ws['F6'].fill = PatternFill(patternType='lightGrid', fgColor="FF0000", bgColor="0000DD")
ws['F8'].fill = PatternFill(patternType='lightGrid', fgColor="0000DD", bgColor="FF0000")

# 前景色と背景色を指定➁
# (4)start_color/end_colorで色を指定することも可能
ws['F10'].fill = PatternFill(patternType='lightGrid', start_color="FF0000", end_color="0000DD")


wb.save('styles_PatternFill.xlsx')

<List2>を実行した結果は以下のようになりました。

左側(B、C列)は、組込みパターンを全て確認しています。色合いはデフォルトのままで、モノトーンとなります。リファレンスとしてご活用下さい。

このプログラムの実行結果は以下からダウンロードできます。

FillPatternオブジェクトの適用例
図8. List2の実行結果

1.2.2 グラデーション塗りつぶし効果(GradientFill)

セルに2色以上の階調色(グラデーション)を適用するには、GradientFillクラス を次の書式のような引数指定でオブジェクトを定義・生成します。

GradientFillオブジェクト

from openpyxl.styles import GradientFill

GradientFill(type, degree, left, right, top, bottom, stop)


引数: type : グラデーションの種類を指定する(デフォルト:’linear‘) linear‘(線形変化), ‘path‘(割合変化)から指定する

引数: degree : グラデーションの角度を指定する(デフォルト:0) 0~360の範囲で指定する typeが’linear’の場合のみ有効

引数: left : 左基準の色合い変化率(デフォルト:0) 20%の場合は’0.2’のように指定する typeが’path’の場合のみ有効

引数: right : 右基準の色合い変化率(デフォルト:0)

引数: top : 上基準の色合い変化率(デフォルト:0)

引数: bottom : 下基準の色合い変化率(デフォルト:0)

引数: stop : グラデーション色を指定する(デフォルト:()) 2以上の色をタプルで指定する

戻り値: GradientFillオブジェクト

※引数は全てオプショナル引数

エクセルの塗りつぶし効果ウィンドウ(グラデーションTab)で設定できる項目の全てをカバーします。図9は、それぞれの引数がどのUI項目に対応するかを示しています。

グラデーションには2通りのパターンが指定できます。1つは「線形変化」で「上↔下」・「左↔右」、それぞれの対向辺に向かって色を等間隔に変化させます。

そして、もう一つが「割合変化」で「上下左右」位置からの割合に応じて色の混ざり具合を変化させるパターンです。

前者は、引数:type に”linear“を指定します。、後者は”path“を指定します。

色の情報は、引数:stop にタプル形式であたえます。

その他の引数は、引数:type にどちらを指定するか用途が異なります。引数:degree は線形変化で有効となり、引数:left/right/top/bottom は割合変化で有効となります。

具体的な効果は、次の<List3>で確認して下さい。

セルの書式ダイアログ(GradientFill)
図9. セルの書式設定 (グラデーション)

SAMPLE(3)

それでは、セルにグラデーション塗りつぶしをするコード例を<List3>に示します。

コードの概要は以下のとおり、

[A]では、引数:type に“linear”を設定しグラデーション方法を「線形変化」にしています。

色の指定は 引数:stop にタプル型式で階調に必要な分を設定します。 また 引数:degree も指定することで階調させる方向も変化させています。

[]では、引数:type に“path”を指定しグラデーション方法を「割合変化」にしています。

引数:top/left に設定する変化率(0.0~1.0)を変えながら階調の変化を確認しています。

※[A]などの記号は、コード内のコメントに対応しています。

from openpyxl import Workbook
from openpyxl.styles import GradientFill    # GradientFillクラスをインポート

wb = Workbook()
ws = wb.active


# (A)--------------------------------------------------------------------------------------------
# 線形グラデーション塗りつぶし

ws.merge_cells('D2:E3')
# 2色指定
ws['D2'].fill = GradientFill(type='linear', stop=("00FF00", "FF0000"))

ws.merge_cells('D5:E6')
# 3色指定
ws['D5'].fill = GradientFill(type='linear', stop=("00FF00","0000FF", "FF0000"))

ws.merge_cells('D8:E9')
# 3色指定 & 91度回転
ws['D8'].fill = GradientFill(type='linear', stop=("00FF00","0000FF", "FF0000"), degree=91)

ws.merge_cells('D11:E12')
# 3色指定 & 181度回転
ws['D11'].fill = GradientFill(type='linear', stop=("00FF00","0000FF", "FF0000"), degree=181)

ws.merge_cells('D14:E15')
# 3色指定 & 271度回転
ws['D14'].fill = GradientFill(type='linear', stop=("00FF00","0000FF", "FF0000"), degree=271)


# (B)--------------------------------------------------------------------------------------------
# (B)-➀
# 変化率グラデーション塗りつぶし➀
# (引数top可変)

ws.merge_cells('H2:I3')
# top=0.0
ws['H2'].fill = GradientFill(type='path', top="0.0", stop=("00FF00", "000000"))

ws.merge_cells('H5:I6')
# top=0.2
ws['H5'].fill = GradientFill(type='path', top="0.2", stop=("00FF00", "000000"))

ws.merge_cells('H8:I9')
# top=0.5
ws['H8'].fill = GradientFill(type='path', top="0.5", stop=("00FF00", "000000"))

ws.merge_cells('H11:I12')
# top=0.8
ws['H11'].fill = GradientFill(type='path', top="0.8", stop=("00FF00", "000000"))

ws.merge_cells('H14:I15')
# top=1.0
ws['H14'].fill = GradientFill(type='path', top="1.0", stop=("00FF00", "000000"))


# -----------------------------------------------------------------------------------------------
# (B)-➁
# 変化率グラデーション塗りつぶし➁
# (引数left可変)

ws.merge_cells('L2:M3')
# left=0.0
ws['L2'].fill = GradientFill(type='path', left="0.0", stop=("00FF00", "000000"))

ws.merge_cells('L5:M6')
# top=0.2
ws['L5'].fill = GradientFill(type='path', left="0.2", stop=("00FF00", "000000"))

ws.merge_cells('L8:M9')
# top=0.5
ws['L8'].fill = GradientFill(type='path', left="0.5", stop=("00FF00", "000000"))

ws.merge_cells('L11:M12')
# top=0.8
ws['L11'].fill = GradientFill(type='path', left="0.8", stop=("00FF00", "000000"))

ws.merge_cells('L14:M15')
# top=1.0
ws['L14'].fill = GradientFill(type='path', left="1.0", stop=("00FF00", "000000"))

# -----------------------------------------------------------------------------------------------
# (B)-➂
# 変化率グラデーション塗りつぶし➂
# (引数left. topを可変)

ws.merge_cells('P6:Q7')
# top=0.5, left=0.5
ws['P6'].fill = GradientFill(type='path', top="0.5", left="0.5", stop=("00FF00", "000000"))

ws.merge_cells('P10:Q11')
# top=0.5, left=0.5
ws['P10'].fill = GradientFill(type='path', top="0.5", left="0.5", stop=("000000", "00FF00"))



wb.save('styles_GradientFill.xlsx')

<List3>を実行した結果は以下のようになりました。

線形グラデーションは直感的に分かりやすいですね。変化割合グラデーションはパラメータの増減によりどのように変調するか自在にカスタムできます。

このプログラムの実行結果は以下からダウンロードできます。

GradientFillオブジェクトの適用例
図10. List3の実行結果

1.3 罫線(Borderオブジェクト)の設定

セルに罫線を適用するには、Borderクラス を次の書式のような引数指定でオブジェクトを定義・生成します。そして、対象のCellオブジェクトの borderプロパティ で、それらを適用させます。

Borderオブジェクト

from openpyxl.styles import Border

Border(left, right, top, bottom, diagonal, diagonalDown, diagonalUp)


引数: left : 罫線(左)にSideオブジェクトを設定

引数: right : 罫線(右)にSideオブジェクトを設定

引数: top : 罫線(上)にSideオブジェクトを設定

引数: bottom : 罫線(下)にSideオブジェクトを設定

引数: diagonal : 罫線(斜線)にSideオブジェクトを設定

引数: diagonalDown : 右から左へ下がる斜線を有効にする

引数: diagonalUp : 右から左へ上がる斜線を有効にする

戻り値: Borderオブジェクト

※引数は全てオプショナル引数

エクセルのセルの書式設定ウィンドウ(罫線Tab)で設定できる項目の全てをカバーします。図11は、それぞれの引数がどのUI項目に対応するかを示しています。

Borderクラスには、セルの上下左右に設定する「罫線の定義情報(Slideオブジェクト)」を、各引数:(left,right,top,bottom) に渡します。Slideオブジェクト (罫線の種類・色)については次項で解説します。

セルの書式ダイアログ(Border)
図11. セルの書式指定(罫線/Borderオブジェクト)

1.3.1 罫線情報(Sideオブジェクト)の定義

罫線の種類、色などの詳細情報は、Slideオブジェクト にまとめて定義します。オブジェクトは、Slideクラス から次の書式のようにして取得します。

Sideオブジェクト

from openpyxl.styles import Side

Side(border_style, color)


引数: border_style : 線の種類設定する(デフォルト:None)

引数: color : 線の色を設定する(デフォルト:’FF000000‘)

戻り値: Sideオブジェクト

※引数は全てオプショナル引数

Excelのセルの書式設定(罫線Tab)と各引数との対応関係は次のとおりです。(図10左)

罫線の種類と色を指定することができます。罫線の種類は、引数:border_style にオプション定数(Enum)として指定します。(図10右)のように、“thin”, ”dotted”など、全13種類の中から選択できます。

色の指定は 引数:color にて、「αRGB形式」または「Colorオブジェクト」で与えます。(Fontオブジェクトなどと同様)

セルの書式ダイアログ(Side)_with_boder_style引数一覧
図12. セルの書式指定(罫線/Slideオブジェクト)

SAMPLE(4)

それでは、セルに罫線(Border(Side)オブジェクト)を適用するコード例を<List4>に示します。

コードの概要は、引数:border_style にすべての線種のオプション定数を指定させながら、線種ごとに「囲い枠線」と「斜線」を各セルに適用させています。

from openpyxl import Workbook
from openpyxl.styles import Border, Side    # Border/Sideクラスをインポート

wb = Workbook()
ws = wb.active

# 罫線の種類一覧(オプション定数)
border_styles = ['hair', 'dashDotDot', 'dashDot', 'thin', 'mediumDashed', 'slantDashDot',
                'dotted', 'dashed', 'medium', 'thick', 'mediumDashDot', 'double', 'mediumDashDotDot']

# 処理対象の行番号を格納したリスト
row_indexes = [3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27]



for row_index, border_style in zip(row_indexes, border_styles): # zipで対象行とスタイル一覧をアンパック
    for col_index in [2, 3, 5]:   # "B列"C列"E列"
        
        if col_index == 2:
            
            # "B列"のセルに線の種類を指定するオプション定数名を設定する
            ws.cell(row=row_index, column=col_index).value=border_style
            
        elif col_index == 3:
            
            # "C列"のセルに囲い枠線を設定する
            side_obj = Side(border_style=border_style)
            # Sideオブジェクトをセルの左右上下に指定してBorderオブジェクトを生成する
            border_obj = Border(left=side_obj, right=side_obj, top=side_obj, bottom=side_obj)
            # Borderオブジェクトを適用する
            ws.cell(row=row_index, column=col_index).border = border_obj
        
        else:
            
            # "E列"のセルに斜線を入れる
            side_obj = Side(border_style=border_style)
            # diagonal* 引数を指定してBorderオブジェクトを生成する
            border_obj = Border(diagonal=side_obj, diagonalDown=True, diagonalUp=True)
            # Borderオブジェクトを適用する
            ws.cell(row=row_index, column=col_index).border = border_obj
            
            
wb.save('styles_Border.xlsx')

それでは、コードのポイントを解説します。

24~31行目:【枠線を設定する】

各線種のオプション定数を、Slideクラス引数:border_sytle に設定して線種ごとのSlideオブジェクトを定義します。次に、Borderクラス の4つの引数:left/right/top/bottom (4方向の枠線)に、先のSlideオブジェクトを設定します。

そして、最後にCellオブジェクトの borderプロパティ で、枠線を実際に反映させます。

33~40行目:【斜線を設定する】

枠線とほぼ同じですが、38行目のBorderオブジェクトの定義で、今度は斜線の設定をしています。引数:diagonal にSlideオブジェクトを、引数:diagonalDown/Up で斜線の有無を“True(有効)”に指定しています。

<List4>を実行した結果は以下のようになりました。

C列のセルには、Borderオブジェクト で「枠線」を適用しました。また、D列には、対角に「斜線」を適用しました。それぞれの線種は、A列の線種名で Slideオブジェクト を定義しています。

すべての線種について、確認していますのでリファレンスとして活用下さい。

このプログラムの実行結果は以下からダウンロードできます。

Borderオブジェクトの適用例
図13. List4の実行結果
スポンサーリンク

2. まとめ

いかがでしたでしょうか?

今回はExcelを操作する「openpyxl」ライブラリを取り上げ、セルに書式設定をする方法(前編 フォント塗りつぶし罫線)について解説してきました。

セルの見栄えを整えることは、大変重要です。今回紹介したセルの書式設定に関する操作は必ず必要になりますので、是非今回の記事を繰り返し確認して頂き、使いこなせるようになりましょう。

最後に、この記事の要点をまとめます。

➀. Excelの書式設定に関連する専用クラスが用意されている。各書式はクラスからオブジェクトを定義・生成したのち、Cellオブジェクトの各プロパティで設定・反映させる。

➁. 書式設定に関連するオブジェクト、プロパティには以下がある。

 ・[フォント]Fontオブジェクト を定義して、Cellオブジェクトのfont属性で設定する。

  文体は勿論、太字・斜体・下線などフォント設定の基本をすべて網羅している。

 ・[塗りつぶし]Fillオブジェクト を定義して、Cellオブジェクトのfill属性で設定する。

  塗りつぶし効果には、「パターン」と「グラデーション」の2種類がある。

 ・[罫線]Borderオブジェクト を定義して、Cellオブジェクトのborder属性で設定する。

  線種や色などのは別にSlideオブジェクトで定義する必要がある。枠線・斜線などに対応


次回も引き続き、セルの書式設定の後編として「表示形式」「配置位置」「スタイルの名前付き定義とその適用方法」について解説していきます。

リンク先はこちら(↓)になりますので、参考にして下さい。

最後までお読みいただきありがとうございました。

Japanese | English

タイトルとURLをコピーしました