openpyxl을 이용하다보면 셀에 테두리 설정해야 할 때가 있죠. 이번엔 Python openpyxl 테두리 설정 방법을 함께 살펴보겠습니다.
목차
openpyxl 테두리 설정 방법
openpyxl에서 테두리 설정에는 openpyxl.styles.borders 모듈의 Border 클래스를 이용하며, Border 설정 시에 Side 클래스를 함께 이용합니다.
아래의 코드는 상, 하, 좌, 우의 테두리를 빨간색 점선으로 꾸미는 코드입니다. Side에서 style이나 border_style을 사용하면 되긴 합니다만 style이 짧으니까, style을 이용하는 편이 나아 보입니다.
from openpyxl import Workbook
from openpyxl.styles import Border, Side
wb = Workbook()
ws = wb.active
side = Side(style='dotted', color="ff0000")
ws['B2'].border = Border(bottom=side, top=side, left=side, right=side)
ws['B2'].value = "테두리"
wb.save("output_border.xlsx")
PythonA1의 경우에 컬럼과 행 번호 때문에 B2에 표시해 보았습니다.
openpyxl 테두리 종류
테두리에 사용할 수 있는 스타일의 종류로는 ‘dotted’, ‘medium’, ‘dashed’, ‘mediumDashDot’, ‘hair’, ‘thin’, ‘double’, ‘slantDashDot’, ‘thick’, ‘dashDot’, ‘mediumDashed’, ‘dashDotDot’, ‘mediumDashDotDot’이 있습니다. 각각의 스타일을 적용하면 어떻게 되는지 함께 확인해 보겠습니다.
from openpyxl import Workbook
from openpyxl.styles import Border, Side
wb = Workbook()
ws = wb.active
styles = ['dotted', 'medium', 'dashed', 'mediumDashDot', 'hair', 'thin', 'double', 'slantDashDot', 'thick', 'dashDot', 'mediumDashed', 'dashDotDot', 'mediumDashDotDot']
row_num = 2
column = 'B'
for style in styles:
side = Side(style=style, color="ff0000")
ws[f'{column}{row_num}'].border = Border(bottom=side, top=side, left=side, right=side)
ws[f'{column}{row_num}'].value = style
row_num += 2
if row_num > 10:
if column == 'B':
ws.column_dimensions['A'].width = 1
ws.column_dimensions['B'].width = 20
row_num = 2
column = chr(ord(column) + 2)
prev_column = chr(ord(column) - 1)
ws.column_dimensions[prev_column].width = 1
ws.column_dimensions[column].width = 20
wb.save("output_border.xlsx")
Python테두리의 형식은 다음 그림과 같습니다.
셀 테두리의 모양과 색상 설정 방법을 간략히 살펴보았습니다.
관련 자료
openpyxl.styles.borders 모듈의 Border 클래스 및 Side 클래스 그리고 colors 모듈의 Color 클래스를 참고했습니다.