openpyxl 罫線を書く

あるセルにどのような罫線の設定がされているかを
下記のプログラムで確認できる。
「test.xlsx」の「A1」セルの罫線の設定を表示する

import openpyxl

wb = openpyxl.load_workbook('test.xlsx')
ws = wb.active

print(ws['A1'].border)

何も設定していない場合

<openpyxl.styles.borders.Border object>
Parameters:
outline=True, diagonalUp=False, diagonalDown=False, start=None, end=None, 

left=<openpyxl.styles.borders.Side object>
Parameters:
style=None, color=None, 

right=<openpyxl.styles.borders.Side object>
Parameters:
style=None, color=None, 

top=<openpyxl.styles.borders.Side object>
Parameters:
style=None, color=None, 

bottom=<openpyxl.styles.borders.Side object>
Parameters:
style=None, color=None, 

diagonal=<openpyxl.styles.borders.Side object>
Parameters:
style=None, color=None, vertical=None, horizontal=None

「A1」セルの上下左右に罫線を書いた場合

<openpyxl.styles.borders.Border object>
Parameters:
outline=True, diagonalUp=False, diagonalDown=False, start=None, end=None, 

left=<openpyxl.styles.borders.Side object>
Parameters:
style='hair', color=None, 

right=<openpyxl.styles.borders.Side object>
Parameters:
style='hair', color=None, 

top=<openpyxl.styles.borders.Side object>
Parameters:
style='hair', color=None, 

bottom=<openpyxl.styles.borders.Side object>
Parameters:
style='hair', color=None, 

diagonal=<openpyxl.styles.borders.Side object>
Parameters:
style=None, color=None, vertical=None, horizontal=None

セルオブジェクトのborderプロパティにBorderというオブジェクトが登録されている。

そのBorderオブジェクトのleft, right, top, bottomというプロパティに
Sideというオブジェクトが登録されている。

そのSideオブジェクトのstyle, colorプロパティに値を設定することで、
セルの左、右、上、下に罫線を書くことができるらしい。

styleに設定できるのは下記のようなものがある。
hair:実線(極細)
thin:実線(細)
medium:実線(中)
thick:実線(太)

colorは設定しなければ、黒になるらしい。

罫線を書くプログラム

import openpyxl
from openpyxl.styles.borders import Border, Side

filename = 'test.xlsx'
wb = openpyxl.load_workbook(filename=filename)
ws = wb.active

side = Side(style='thick')
border = Border(top=side, bottom=side, left=side, right=side)
ws['A1'].border = border

wb.save(filename)

エクセルシートの値が入っている範囲に罫線を設定するには下記のようにすればいい。
ワークシートオブジェクトが値が入っているセルの範囲を認識してくれている。

import openpyxl
from openpyxl.styles.borders import Border, Side

filename = 'test.xlsx'
wb = openpyxl.load_workbook(filename=filename)
ws = wb.active

side = Side(style='thin')
border = Border(top=side, bottom=side, left=side, right=side)

for row in ws:
    for cell in row:
        cell.border = border

wb.save(filename)

罫線を書く範囲を行と列の数で指定する場合
3行、4列の範囲で設定する例

import openpyxl
from openpyxl.styles.borders import Border, Side

filename = 'test.xlsx'
wb = openpyxl.load_workbook(filename=filename)
ws = wb.active

side = Side(style='thin')
border = Border(top=side, bottom=side, left=side, right=side)

for row in range(1, 4):
    for column in range(1, 5):
        ws.cell(row, column).border = border

wb.save(filename)