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

※社外のコラムニストによる記事です。Python関連の情報をお伝えします。

「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます。

前回はセルのデータタイプの設定方法を学びました。
今回は各種スタイルの設定について学びます。

セルのスタイルを設定してみよう

Chapter2-8ではこれまでセルのデータタイプや表示形式の設定方法について学びましたが、今回は罫線の引き方や文字の大きさ、セルの幅・高さ、背景色の設定、フォントの指定を学びます。 まずはサンプルコードです。


P.90 サンプルコード

これを実行すると、下記のファイルができます。

ではこれを踏まえて、ひとつずつ設定を見ていきたいと思います。

セルのサイズ

列や行を指定してセルのサイズを設定して、それぞれに数値を与えると設定できます。ちなみに、列幅は文字数を基準にした単位で指定され、行の高さはポイント(pt)で指定されます。 サンプルコードではセルB2に対して、高さ40、幅40で設定しています。

基本の書式:

文字の配置

Alignmentクラスを使い、文字をセルのどこに配置するか決めます。
サンプルコードではセルの中央に配置されるようになっています。
基本の書式と、設定できる内容は次の通り。

基本の書式:

内容記述
水平:左寄せhorizontal="left"
水平:中央horizontal="center"
水平:右寄せhorizontal="right"
垂直:上vertical="top"
垂直:中央vertical="center"
垂直:下vertical="bottom"
テキストの折り返しwrap_text=True

罫線

BorderクラスとSideクラスを使って、線の種類、色、セルのどの位置に表示するかを設定します。top / bottom / left / right はセルの上下左右の境界線を表します。

サンプルコードではセルを囲うように黒い細線で引かれています。また、上下左右、ひとつずつ線の種類と色を指定していますが、同じ線種で書く場合は次のようにまとめて書くことができます。

基本の書式:

線の種類記述
細線thinside = Side(style="thin", color=" 000000")
中線mediumside = Side(style="medium", color="000000")
太線thickside = Side(style="thick", color="000000")
破線dashedside = Side(style="dashed", color="000000")
点線dottedside = Side(style="dotted", color="000000")
二重線doubleside = Side(style="double", color="000000")
極細線hairside = Side(style="hair", color="000000")

※記述例で指定している色は黒です。openpyxlでの色に関する注意事項については後ほど。

フォント

Fontクラスを使い、フォント名や文字サイズ、太字などのスタイルを設定します。
基本の書式と、設定できる内容は次の通り。

基本の書式:

内容引数記述
フォント名namename="游ゴシック"
文字サイズsizesize=11
太字boldbold=True
斜体italicitalic=True
下線underlineunderline="single" underline="double"
文字色colorcolor="000000"

※使えるフォントは環境依存のため、指定したフォントがPCにあればそのまま使用され、なければ代替フォントが使用されます。Arial、Calibri、Meiryoあたりが安定です。

背景色

PatternFillクラスを使い、セルの背景の色や模様を設定します。
基本の書式と、設定できる内容は次の通り。

基本の書式:

 内容引数記述
模様単色fill_typefill_type="solid"
格子darkGridfill_type="darkGrid"
横線darkHorizontalfill_type="darkHorizontal"
縦線darkVerticalfill_type="darkVertical"
薄い縦線lightVerticalfill_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業務の効率化に課題をお持ちの方は、ぜひグローバルウェイにご相談ください。業務内容に合わせた自動化の設計から開発・運用まで支援いたします。

https://gw-python.com/python-auto