【Python】openpyxlでExcelを操作する ③ -フォント、罫線

openpyxlはPythonでExcelを操作するライブラリです。openpyxlではExcelファイルの中身のデータだけでなく、見た目の編集もできます。

今回は、openpyxlで文字のフォントや罫線を編集する方法を紹介します。

フォント操作

フォント操作には、openpyxl.styles.fonts.Font()を用います。毎回こんな長いメソッドを呼び出すのも面倒なので、以下のようにインポートしておきましょう。

from openpyxl.styles import Font
font = Font(name='フォント名')

単一のセルのフォントを変えたい場合は、以下のように指定します。

from openpyxl.styles import Font
font = Font(name='メイリオ')

ws['A3'].font = font

A3セルのフォントだけがメイリオになりました。

シート全体まとめて変更

シート全体のフォントをまとめて変更したい場合は、for文でセルの数だけ処理を繰り返します。

for row in ws:
    for cell in row:
        ws[cell.coordinate].font = font

1つ目のfor文で行ごと、2つ目のfor分で行のセルごとに処理を行っています。

ws[cell.coordinate]では該当セルの番地を取得します。なので処理としては指定番地のフォントを変更しているということになります。

罫線操作

罫線を引くためにはBorderとSide関数をインポートしておきます。

from openpyxl.styles.borders import Border, Side

Side関数

まずはSideオブジェクトに線の情報を持たせます。

side = Side(style=’thin’, color=’000000′)

styleは罫線の種類を指定します。’thin’は通常の細い罫線ですが、以下のような種類を指定できます。

colorは罫線の色を指定します。16進数6桁のカラーコードで指定しますが、以下サイトが参考になります。

https://color.adobe.com/ja/create/color-wheel

Border関数

Sideオブジェクトに罫線の情報を持たせたら、Borderオブジェクトを作成してどこに罫線を引くかを指定します。

border = Border(top=side, bottom=side, left=side, right=side)

引数top, bottom, left, rightでそのセルに対してどの位置に罫線を引くかを指定します。topは上部、bottomは下部に罫線を引きます。

複数のSideオブジェクトを作成しておけば、以下の例のように上下左右で別々の線を引くこともできます。

side = Side(style='thin', color='000000')
side2 = Side(style='medium', color='000000')

border = Border(top=side, bottom=side2, left=side)

例ではrightを指定していませんが、指定しない場合は線は引かれません。

斜めに線(対角線)を引きたい場合は、引数diagonalにSideオブジェクトを渡します。右肩上がりの対角線か右肩下がりの対角線かは、diagonalUpおよびdiagonalDownで指定します。diagonalUpは右肩上がり、diagonalDownは右肩下がりの対角線になります。Trueとすることで対角線を引くことができます。

#右上がりの対角線
borderUp = Border(diagonal=side, diagonalUp=True)

#右下がりの対角線
borderUp = Border(diagonal=side, diagonalDown=True)

まとめ

openpyxlでExcelのフォント及び罫線を指定する方法を紹介しました。

PythonでExcel操作を自動化すれば、いちいち面倒だった罫線引きといった作業が不要になります。同じフォーマットのExcelファイルを何度も作成しているのであれば、Pythonを使った自動処理を是非活用してみてください^^

ではでは👋