Python openpyxl 테두리 설정 방법 13가지

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")
Python

A1의 경우에 컬럼과 행 번호 때문에 B2에 표시해 보았습니다.

그림 1. Python openpyxl 테두리(border) 붉은 점선 설정 결과
그림 1. Python openpyxl 테두리(border) 붉은 점선 설정 결과

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

테두리의 형식은 다음 그림과 같습니다.

그림 2. openpyxl 테두리 종류별 적용 결과
그림 2. openpyxl 테두리 종류별 적용 결과

셀 테두리의 모양과 색상 설정 방법을 간략히 살펴보았습니다.

관련 자료

openpyxl.styles.borders 모듈의 Border 클래스 및 Side 클래스 그리고 colors 모듈의 Color 클래스를 참고했습니다.

같이 읽으면 좋은 글

Leave a Comment