表にいつも手動で罫線をつけているなら、Pythonで自動化するのもいいかもしれません。
Excelにopenpyxlライブラリで罫線(外枠)を自動で最終行まで設定する方法をご紹介します。
目標物
beforeのように罫線を設定していないExcelファイルが、Pythonによって一瞬で外枠の線が自動で追加されるようになります!
行数に合わせた外枠追加
行数が変わっても大丈夫。
下の画像のように自動で最終行を取得して罫線が設定されます。
Pythonのプログラム
私の考えたコードは次のとおり。
import openpyxl
#罫線を引くために必要なimport
from openpyxl.styles.borders import Border, Side
wb=openpyxl.load_workbook("予約表テンプレート.xlsx", data_only=True)
ws=wb["Sheet1"]
#Side関数とBorder関数を定義
side=Side(style="thin", color="545454")
border_left=Border(left=side)
border_right=Border(right=side)
border_top=Border(top=side)
#両サイドに罫線を追加
for row in range(5,100):
if ws.cell(row,2).value!=None:
ws.cell(row,2).border=border_left
ws.cell(row,6).border=border_right
else:
break
#底辺に罫線を追加
for col in range(2,7):
ws.cell(ws.max_row,col).border=border_top
wb.save("予約表.xlsx")
コード解説
openpyxlで罫線を引くためのポイントは次の3つです。
- 罫線を引くためのimport文が必要
- 線の太さと色を定義する
- Excelの1つのセルをイメージし、上下左右どこに罫線を引くかを定義する
3番目のセルの考え方のイメージ
セルの四辺をtop、bottom、left、rightに分けて線をつけます。
罫線を引くために必要なimportについて
この宣言が必要で、BorderとSideは罫線を引く、色などを設定するために書きます。
#罫線を引くために必要なimport
from openpyxl.styles.borders import Border, Side
Side関数とBorder関数を定義
お好みの変数にSide()とBorder()を定義してください。
Side()には線の太さと色を、Border()にはセルの上下左右どこに罫線を引きたいのかを定義します。
線の太さはthin、medium、thickの順に太くなります。
例えばborder_right=Border(right=side)だとセルの右側に罫線が付きます。
四方に一気に線を引く場合は
border=Border(left=side, right=side, top=side, bottom=side)
のように書くことができます。
#Side関数とBorder関数を定義
side=Side(style="thin", color="545454")
border_left=Border(left=side)
border_right=Border(right=side)
border_top=Border(top=side)
for文で罫線を書く
まずは枠の両サイドにfor文で罫線を引きます。
B2セル(日付部分)に値が入っていたら罫線を引き、B2セルの値が何も無かったらストップします。
#両サイドに罫線を追加
for row in range(5,100):
if ws.cell(row,2).value!=None:
ws.cell(row,2).border=border_left
ws.cell(row,6).border=border_right
else:
break
if ws.cell(row,2).value!=None:は、if ws.cell(row,2).value is not None:と同じで、
値が空ではなかったら、もし値が入っていたら、という意味です。
これでセルに値が無くなるまで、つまり最終行まで両サイドに罫線が引けます。
最後に底辺にも罫線を引きます。
底辺は2列目から6列目までと決まっているので、range(2,7)と設定できます。
行については、ws.max_rowで最終行を取得。
#底辺に罫線を追加
for col in range(2,7):
ws.cell(ws.max_row,col).border=border_top
ポイントはborder_bottomではなく、border_topにしてセルの上辺に罫線を引くことです。
罫線の設定、すごく楽しいのでぜひ試してみてください!