Python openpyxl 셀 배경색 설정 방법

Python openpyxl 셀 배경색 설정 방법을 살펴보겠습니다.

openpyxl 셀 배경색 단색 설정 방법

단색 설정

openpyxl.styles의 PatternFill을 이용해서 fill 객체를 만들어 주면 됩니다. 시작 색상과 끝 색상을 지정해 주긴 하지만, 어차피 fill_type은 ‘solid’이므로 큰 차이 없습니다.

from openpyxl import Workbook
from openpyxl.styles import PatternFill

# 워크북과 워크시트 생성
wb = Workbook()
ws = wb.active

ws['A1'] = "첫째 셀"
# 셀 배경색 지정
fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
ws['A1'].fill = fill

# 워크북 저장
wb.save("background_color.xlsx")
Python

첫째 셀을 노란색으로 채운 결과는 아래와 같습니다.

그림 1. openpyxl 셀 배경색 노랑색으로 채움
그림 1. openpyxl 셀 배경색 노랑색으로 채움

패턴으로 채우기

위의 코드 라인 10을 아래와 같이 변경해서 가능한 fill_type들을 사용해 보았습니다.

fill = PatternFill(start_color="FF0000", end_color="FFFF00", fill_type=fill_type)
Python

사용한 결과는 아래와 같습니다. 두 가지 색의 조합이 이루어지는 것으로 보입니다. 두 가지 색의 조합 방식으로 아래에 있는 값들을 fill_type에 이용할 수 있습니다.

그림 2. fill_type에 사용할 수 있는 patternType에 따른 openpyxl 셀 배경색 채움 결과

패턴타입이 적용되지 않는 경우

LibreOffice에서는 엑셀의 패턴 타입이 적용되지 않습니다. 그래서 그림 3과 같이 중간값 정도의 단색으로 보여지게 됩니다.

그림 2. fill_type에 사용할 수 있는 patternType에 따른 openpyxl 셀 배경색 채움 결과
그림 3. Libre Office에서 그림 2의 결과를 열어본 결과

openpyxl 셀 배경색 그라데이션 설정 방법

수직 그라데이션

수직으로 그라데이션을 사용하는 경우에는 stop에 Tuple로 좌측에서 시작하는 값과 우측에서 끝나는 값을 RGB값으로 정해주면 됩니다.

# 수직 그라데이션
grad_fill = GradientFill(stop=("FF0000", "FFFF00"))
ws['A1'].fill = grad_fill
Python

위와 같은 코드의 실행 결과는 아래와 같습니다.

그림 4. openpyxl 수직 그라데이션 결과
그림 4. openpyxl 수직 그라데이션 결과

수평 그라데이션

수평으로 그라데이션을 사용하는 경우에도 마찬가지로 stop에 시작하는 값과 하단에서 끝나는 값을 RGB값으로 각각 넣어주면 됩니다. type은 linear로 각도는 90도로 지정해 주면 수평 그라데이션이 가능합니다.

# 수평 그라데이션
horizontal_grad_fill = GradientFill(stop=("FF0000", "FFFF00"), type="linear", degree=90)
ws['A1'].fill = horizontal_grad_fill
Python

위의 코드를 실행한 결과입니다.

그림 5. openpyxl 수평 그라데이션 결과
그림 5. openpyxl 수평 그라데이션 결과

각도 지정 그라데이션

45도로 각도를 지정해주면 해당 각도로 그라데이션 설정이 됩니다.

diagonal_grad_fill = GradientFill(stop=("FF0000", "FFFF00"), type="linear", degree=45)
ws['A1'].fill = diagonal_grad_fill
Python
그림 6. openpyxl 45도 그라데이션 결과
그림 6. openpyxl 45도 그라데이션 결과

정리

셀의 색상을 채우는 방법을 살펴보았습니다. 엑셀에서는 그라데이션이 적용되지만, LibreOffice에서는 그라데이션이나 배경 패턴이 적용되지 않고 단색처리되고 있었습니다. 이 부분 참고해서 작업하시면 되겠습니다.

관련 자료

openpyxl 문서의 fills 페이지에서 GradientFill, PatternFill을 참고했습니다.

같이 읽으면 좋은 글

Leave a Comment