Python openpyxl 폰트 스타일 설정 방법

파이썬에서 openpyxl로 엑셀 파일을 만들 때, 폰트 크기, 굵기, 폰트 색상 등 폰트를 활용한 스타일 설정이 필요할 때 있죠? 이번엔 Python openpyxl 폰트 스타일 설정 방법을 알아보도록 하겠습니다.

Python openpyxl 폰트 스타일 설정

폰트 설정은 구체적으로 글꼴 이름과 크기, 굵기, 이탤릭, 세로정렬, 밑줄, 취소선, 색상을 아래와 같이 설정할 수 있습니다. 당연히 중복해서 설정이 가능합니다.

from openpyxl.styles import Font

font = Font(name='Verdana',
            size=15,
            bold=True,
            italic=True,
            vertAlign=None,
            underline='none',
            strike=False,
            color='FF000000')
Python

위의 코드 예시와 같이 사용할 수도 있으며, 아래 표 1의 대체 파라미터로도 대신 사용할 수 있습니다. sz, b, i, u 정도는 더 짧고 간단하게 이용할 수 있습니다.

폰트 속성파라미터대체 파라미터값 종류기본값
폰트 이름name없음문자열(예, D2Coding)‘Calibri’
폰트 크기sizesz정수, 실수(예, 13.2)11
굵게boldbBool(True or False)False
이탤릭처리italiciBool(True or False)False
취소선strikestrikethroughBool(True or False)False
밑줄underlineu문자열(none, single, double)‘none’
외곽선outline없음Bool(True or False)False
위첨자/아래첨자vertAlign없음문자열(superscript, subscript, baseline)None
색상color없음문자열 또는 Color 인스턴스‘FF000000’
표 1. Python openpyxl 폰트 스타일 속성

폰트 스타일 적용 방법

다음과 같이 생성한 폰트 인스턴스 객체를 셀 객체의 font 값으로 지정해 주면 폰트 설정이 끝납니다.

ws['C3'].font = font
Python

이제는 위에서 살펴본 각 속성 별로 가질 수 있는 값에 대해 상세히 살펴보겠습니다.

폰트 이름(name)

name에는 사용할 폰트의 이름을 적어주시면 됩니다. “D2Coding”이라는 폰트를 사용한다면 다음과 같이 name에 D2Coding을 적어주시면 됩니다. 폰트 이름을 지정하지 않으면 기본값으로 ‘Calibri’가 적용됩니다.

아래 그림 1에서 A1에는 D2Coding을 적용해 보고, A2에는 Verdana를 적용해 보았습니다.

그림 1. Python openpyxl 폰트 스타일: 폰트 이름 설정
그림 1. Python openpyxl 폰트 스타일: 폰트 이름 설정

사용한 코드는 다음과 같습니다.

from openpyxl.styles import Font
from openpyxl.workbook import Workbook

ft1 = Font(name='D2Coding')
ft2 = Font(name='Verdana')

wb = Workbook()
ws = wb.active
ws['A1'].value = 'Report Name'
ws['A2'].value = 'Report Name'
ws['A1'].font = ft1
ws['A2'].font = ft2
wb.save('example.xlsx')
Python

글자 크기(size or sz)

글자 크기는 size 또는 sz 파라미터를 사용하면 됩니다. 사용할 수 있는 값은 정수값이나 실수값을 사용하면 됩니다. 사용하는 값은 pt(포인트) 단위로 적용됩니다. 크기를 지정하지 않으면 기본값으로 11포인트가 적용됩니다.

그림 2는 A1에는 D2Coding 글꼴로 15포인트를 적용시켰고, A2에는 15.5포인트를 적용했습니다.

그림 2. Python openpyxl 폰트 스타일: 폰트 크기 설정
그림 2. Python openpyxl 폰트 스타일: 폰트 크기 설정

사용한 코드는 아래와 같습니다. 글자 크기만을 비교하기 위해 A1과 A2에 동일한 글꼴 D2Coding을 적용했습니다. size와 sz 파라미터를 각각 사용해 보았습니다. 아래 코드부터는 폰트 이름에서 사용한 코드와 중복되는 코드는 제외하겠습니다.

ft1 = Font(name='D2Coding', size=15)
ft2 = Font(name='D2Coding', sz=15.5)
Python

굵은 글자(bold or b)

폰트를 굵게 표시하려면 bold 또는 b 값으로 True 처리해 주면 되며, 그렇지 않다면 False로 지정해 주면 됩니다. 기본값은 False입니다.

폰트 굵기를 적용한 결과는 아래와 같습니다.

그림 3. Python openpyxl 폰트 스타일: 폰트 굵기 설정
그림 3. Python openpyxl 폰트 스타일: 폰트 굵기 설정

폰트 크기는 모두 15pt로 유지하고, A2에만 폰트 굵기를 True로 설정해 주었습니다.

ft1 = Font(name='D2Coding', sz=15)
ft2 = Font(name='D2Coding', sz=15, b=True)
Python

기울임(italic or i)

폰트를 기울임 처리하려면 italic 또는 i 값을 True 처리해 주면 되며, False로 지정하면 글자를 기울이지 않습니다. 기본값은 False입니다.

폰트 기울임을 적용한 결과는 아래 그림과 같습니다.

그림 4. Python openpyxl 폰트 스타일: 폰트 기울기 설정
그림 4. Python openpyxl 폰트 스타일: 폰트 기울기 설정

폰트 크기는 15pt로 유지하고, A2에만 기울임 처리를 적용했습니다.

ft1 = Font(name='D2Coding', sz=15)
ft2 = Font(name='D2Coding', sz=15, i=True)
Python

밑줄 표시(underline or u)

underline(밑줄)은 2가지 종류의 값을 갖습니다. 밑줄로 한 줄을 사용하면 ‘single’값을 사용하며, 두 줄을 사용하면 ‘double’값을 사용하면 됩니다. 만약 밑줄을 사용하지 않으려면 ‘none’ 값을 사용하면 됩니다. 기본값은 ‘none’입니다.

밑줄 표시에 대한 예시는 다음 그림과 같습니다.

그림 5. Python openpyxl 폰트 스타일: 폰트 밑줄 설정
그림 5. Python openpyxl 폰트 스타일: 폰트 밑줄 설정

아래의 코드를 사용했습니다.

ft1 = Font(name='D2Coding', sz=15, underline='none')
ft2 = Font(name='D2Coding', sz=15, u='single')
ft3 = Font(name='D2Coding', sz=15, u='double')
Python

취소선(strike or strikethrough)

취소선을 적용하면 글자의 가운데에 가로줄 처리가 됩니다. 다음과 같이 strike 또는 strikethrough 파라미터를 사용하며, True와 False 값을 갖습니다. 기본값은 False입니다.

strike 속성을 적용한 결과는 아래와 같습니다.

그림 6. Python openpyxl 폰트 스타일: 폰트 취소선 설정
그림 6. Python openpyxl 폰트 스타일: 폰트 취소선 설정

사용한 코드는 아래와 같습니다.

ft1 = Font(name='D2Coding', sz=15)
ft2 = Font(name='D2Coding', sz=15, strike=True)
Python

외곽선(outline)

외곽선을 적용하면 글자의 외곽선만 표시되고, 속은 비어있는 형태를 띱니다. outline에 True나 False 값을 적용해서 사용할 수 있습니다.

아래 그림은 A2에 외곽선을 지정한 사용 예시입니다.

그림 7. Python openpyxl 폰트 스타일: 폰트 외곽선 설정
그림 7. Python openpyxl 폰트 스타일: 폰트 외곽선 설정

사용한 코드는 아래와 같습니다.

ft1 = Font(name='D2Coding', sz=15)
ft2 = Font(name='D2Coding', sz=15, outline=True)
Python

첨자(vertAlign)

위첨자(superscript)나 아래첨자(subscript)를 사용하거나, 사용하지 않을 수 있습니다. 사용하지 않을 때에는 None 객체를 할당해 주거나, ‘baseline’값을 주면 됩니다.

위첨자, 기본, 아래첨자를 각각 A2~A4까지 적용해 보았습니다.

그림 8. Python openpyxl 폰트 스타일: 폰트 첨자 설정
그림 8. Python openpyxl 폰트 스타일: 폰트 첨자 설정

사용한 코드는 아래와 같습니다.

ft1 = Font(name='D2Coding', sz=15)
ft2 = Font(name='D2Coding', sz=15, vertAlign='superscript')
ft3 = Font(name='D2Coding', sz=15, vertAlign='baseline')
ft4 = Font(name='D2Coding', sz=15, vertAlign='subscript')
Python

폰트 복사

위의 예제들을 보면서 뭔가 많이 중복된다고 느끼지 않으셨나요? 맞습니다. 계속 폰트 이름은 D2Coding에 사이즈는 15포인트로 중복입니다. 따라서 아래와 같이 폰트 인스턴스 객체 ft1을 ft2로 복사한 다음 bold 값만 True로 설정해 주면 모든 설정은 동일하게 하고 bold 값만 설정할 수 있습니다.

from copy import copy

ft1 = Font(name='D2Coding', sz=15)
ft2 = copy(ft1)
ft2.b = True
Python

폰트 색상(color)

글자의 색상을 지정할 때에는 color 파라미터를 사용하면 됩니다. aRGB 또는 RGB 형태의 문자열 값을 가질 수 있으며, Color 인스턴스 객체도 값으로 가질 수 있습니다. 기본값은 aRGB 형태의 ‘FF000000’입니다. 불투명한 검은색 글자입니다.

그림 9. Python openpyxl 폰트 스타일: 폰트 색상 설정
그림 9. Python openpyxl 폰트 스타일: 폰트 색상 설정

색상은 라인 3과 같이 RGB 형태로 입력하면 ‘FFFF0000’으로 aRGB 값으로 처리됩니다. 어쨌든 빨강색으로 표시됩니다. 라인 5와 7에서는 각각 레거시 테마와 색조, 그리고 인덱스를 사용하는 방법을 적용해 보았습니다. 인덱스 값에 대해서는 Working with styles 문서를 참고하시기 바랍니다. 단, 인덱스 색상 표기법에 대해서는 나와있지만, 테마와 색조를 사용하는 방법에 대해 상세히 나와 있지는 않습니다.

ft1 = Font(name='D2Coding', sz=15)
ft2 = copy(ft1)
ft2.color = 'FF0000'
ft3 = copy(ft1)
ft3.color = Color(theme=6, tint=0.5)
ft4 = copy(ft1)
ft4.color = Color(indexed=33)
Python

정리

여기까지 Python openpyxl 글꼴 스타일 설정 방법을 알아보았습니다. 필요하셨던 분들께 도움이 되길 바랍니다.

관련 자료

Python openpyxl 스타일 공식 문서 Working with styles를 참고했습니다.

같이 읽으면 좋은 글

Leave a Comment