openpyxlでExcelに書式を設定したい ~セルのスタイル設定~

※社外のコラムニストによる記事です。Python関連の情報をお伝えします。
「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます。
前回はセルのデータタイプの設定方法を学びました。
今回は各種スタイルの設定について学びます。
セルのスタイルを設定してみよう
Chapter2-8ではこれまでセルのデータタイプや表示形式の設定方法について学びましたが、今回は罫線の引き方や文字の大きさ、セルの幅・高さ、背景色の設定、フォントの指定を学びます。 まずはサンプルコードです。
P.90 サンプルコード
import openpyxl as xl
book = xl.Workbook()
sheet = book.active
# 横幅を指定 --- (*1)
sheet.column_dimensions['B'].width = 40
# 高さを指定 --- (*2)
sheet.row_dimensions[2].height = 40
cell = sheet["B2"]
cell.value = "喜びにあふれた心は良い薬"
# テキスト配置の指定 --- (*3)
from openpyxl.styles.alignment import Alignment
cell.alignment = Alignment(
horizontal='center', # 水平位置を中央に
vertical='center') # 垂直位置を中央に
# 罫線の指定 --- (*4)
from openpyxl.styles.borders import Border, Side
cell.border = Border(
top=Side(style='thin', color='000000'), # 上
right=Side(style='thin', color='000000'), # 右
bottom=Side(style='thin', color='000000'),# 下
left=Side(style='thin', color='000000'), # 左
)
# フォントの指定 --- (*5)
from openpyxl.styles import Font
cell.font = Font(
size=14, # 文字サイズ
bold=True, # 太文字
italic=True, # イタリック
color='FFFFFF') # 文字色
# 背景色の指定 --- (*6)
from openpyxl.styles import PatternFill
cell.fill = PatternFill(
fill_type='solid', # べた
fgColor='FF0000') # 赤色
# 保存
book.save("style.xlsx")
これを実行すると、下記のファイルができます。

ではこれを踏まえて、ひとつずつ設定を見ていきたいと思います。
セルのサイズ
列や行を指定してセルのサイズを設定して、それぞれに数値を与えると設定できます。ちなみに、列幅は文字数を基準にした単位で指定され、行の高さはポイント(pt)で指定されます。 サンプルコードではセルB2に対して、高さ40、幅40で設定しています。
基本の書式:
sheet.column_dimensions["列"].width = 数値 # 列幅
sheet.row_dimensions[行].height = 数値 # 行の高さ
文字の配置
Alignmentクラスを使い、文字をセルのどこに配置するか決めます。
サンプルコードではセルの中央に配置されるようになっています。
基本の書式と、設定できる内容は次の通り。
基本の書式:
from openpyxl.styles import Alignment
cell.alignment = Alignment(horizontal="center", vertical="center")
| 内容 | 記述 |
| 水平:左寄せ | horizontal="left" |
| 水平:中央 | horizontal="center" |
| 水平:右寄せ | horizontal="right" |
| 垂直:上 | vertical="top" |
| 垂直:中央 | vertical="center" |
| 垂直:下 | vertical="bottom" |
| テキストの折り返し | wrap_text=True |
罫線
BorderクラスとSideクラスを使って、線の種類、色、セルのどの位置に表示するかを設定します。top / bottom / left / right はセルの上下左右の境界線を表します。
サンプルコードではセルを囲うように黒い細線で引かれています。また、上下左右、ひとつずつ線の種類と色を指定していますが、同じ線種で書く場合は次のようにまとめて書くことができます。
基本の書式:
from openpyxl.styles import Border, Side
side = Side(style="線の種類", color="線の色")
cell.border = Border(top=side, bottom=side, left=side, right=side) # セルの上下左右
| 線の種類 | 値 | 記述 |
| 細線 | thin | side = Side(style="thin", color=" 000000") |
| 中線 | medium | side = Side(style="medium", color="000000") |
| 太線 | thick | side = Side(style="thick", color="000000") |
| 破線 | dashed | side = Side(style="dashed", color="000000") |
| 点線 | dotted | side = Side(style="dotted", color="000000") |
| 二重線 | double | side = Side(style="double", color="000000") |
| 極細線 | hair | side = Side(style="hair", color="000000") |
※記述例で指定している色は黒です。openpyxlでの色に関する注意事項については後ほど。
フォント
Fontクラスを使い、フォント名や文字サイズ、太字などのスタイルを設定します。
基本の書式と、設定できる内容は次の通り。
基本の書式:
from openpyxl.styles import Font
cell.font = Font(name="フォント名", size=文字サイズ, 文字のスタイル)
| 内容 | 引数 | 記述 |
| フォント名 | name | name="游ゴシック" |
| 文字サイズ | size | size=11 |
| 太字 | bold | bold=True |
| 斜体 | italic | italic=True |
| 下線 | underline | underline="single" underline="double" |
| 文字色 | color | color="000000" |
※使えるフォントは環境依存のため、指定したフォントがPCにあればそのまま使用され、なければ代替フォントが使用されます。Arial、Calibri、Meiryoあたりが安定です。
背景色
PatternFillクラスを使い、セルの背景の色や模様を設定します。
基本の書式と、設定できる内容は次の通り。
基本の書式:
from openpyxl.styles import PatternFill
cell.fill = PatternFill(
fill_type="模様",
start_color="色", # 前景色
end_color="色" # 背景色)
| 内容 | 引数 | 記述 | |
| 模様 | 単色 | fill_type | fill_type="solid" |
| 格子 | darkGrid | fill_type="darkGrid" | |
| 横線 | darkHorizontal | fill_type="darkHorizontal" | |
| 縦線 | darkVertical | fill_type="darkVertical" | |
| 薄い縦線 | lightVertical | fill_type="lightVertical" | |
| 色 | 前景色 | start_color(fgColor) | start_color="FFFF00" (fgColor="FFFF00") |
| 背景色 | end_color(bgColor) | end_color="FFFF00" (bgColor="FFFF00") |
単色で塗りつぶす場合は、前景色のみが使用されます。背景色を指定しても表示には反映されないようです。格子などの模様にする場合は前・背景色の両方を指定します。
例えば、模様を横線、前景を赤、背景を黒という指定をすると下記のようになります。

補足)色について
openpyxlでは基本的に16進数のカラーコードで色を指定します。
ExcelではARGB形式(A+RGB)が使用されるため、赤は FFFF0000 のように記述されます。
RGB形式の FF0000 のような書き方でも動く場合がありますが、環境によっては正しく反映されない場合もあります。先頭に FF(不透明を表す文字)を付けたARGB形式で指定する方法が推奨されているようです。
openpyxlのスタイル設定まとめ
もっと詳しく知りたい方は以下の公式ドキュメントもご参照ください。
openpyxl公式ドキュメント
https://openpyxl.readthedocs.io/en/stable/styles.html
openpyxl API Reference
https://openpyxl.readthedocs.io/en/stable/api/openpyxl.styles.html
これでChapter2までの学習が終わりました。
本シリーズでは、Pythonを使ったExcel操作の基本を紹介してきました。より詳しく学びたい方は、参考書籍もあわせてご確認ください。
Pythonを活用した業務自動化やExcel業務の効率化に課題をお持ちの方は、ぜひグローバルウェイにご相談ください。業務内容に合わせた自動化の設計から開発・運用まで支援いたします。

