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)