Search

Python 22. 파이썬으로 엑셀 다루기 - 심화편 : 스타일 지정하기 (feat. openpyxl)

Created at
2024/02/23
Updated at
2025/01/23
Tags
Keywords
업무자동화
3 more properties
#python #파이썬 #업무자동화 #openpyxl
지난 포스팅에서는 openpyxl 패키지를 이용해 python으로 엑셀 작업을 자동화하는 기본적인 방법에 대해 알아보았다. 엑셀 파일을 만들거나 불러와 시트와 셀에 접근하고 값을 입력하거나 가져오는 방법 등이다.
이번에는 openpyxl 심화편으로, 폰트나 테두리, 배경 등 셀 서식 등을 지정해서 엑셀 파일을 스타일링하는 방법을 정리해보자.
목차

1. 셀 서식 지정하기

1.1 글꼴 설정

openpyxl.styles 모듈의 Font 클래스를 사용해 텍스트의 폰트, 사이즈 등 글꼴을 설정할 수 있다.
Font 객체를 생성하고 셀의 font 속성에 할당하면 해당 스타일이 적용됨
객체 생성에 사용되는 글꼴 속성
속성
설명
name
글꼴 이름
size
글꼴 크기
bold
굵게
italic
기울임
color
색상 (16진수 색상코드 사용)
underline
밑줄
예시 코드
from openpyxl import Workbook from openpyxl.styles import Font # workbook 생성하고 데이터 입력 wb = Workbook() sh = wb.active # 기본 시트 선택 cell1 = sh.cell(row=2, column=2) # B2셀 선택 cell1.value = '폰트 테스트 1' cell2 = sh['B3'] # B3셀 선택 cell2.value = '폰트 테스트 2' # cell1, cell2에 글꼴 설정 cell1.font = Font(name='굴림', color='4B0082', italic=True, bold=True, size=14) cell2.font = Font(name='맑은고딕', color='FF6347', italic=False, bold=False, size=20) # Save the workbook wb.save(filename="test_excel_2.xlsx")
Python
복사

1.2 셀 배경색 지정

openpyxl.stylesPatternFill 클래스 사용한 단색 배경
PatternFill 객체를 생성하여 셀의 fill 속성에 할당하면 해당 스타일이 적용됨
객체 생성에 사용되는 셀 배경색 속성
속성
설명
fill_type
- 단일 색일 경우 ‘solid’ - 기타: ‘darkGray’, ‘darkUp’, ‘lightDown’, ‘darkGrid’, ‘darkHorizontal’, ‘lightTrellis’, ‘lightVertical’, ‘gray0625’, ‘gray125’, ‘lightGray’, ‘lightUp’, ‘darkDown’, ‘darkTrellis’, ‘lightGrid’, ‘mediumGray’, ‘darkVertical’, ‘lightHorizontal’
start_color / end_color
색상 (16진수 색상코드 사용)
fgColor
패턴 색상 (16진수 색상코드 사용)
bgColor
배경 색상 (16진수 색상코드 사용)
예시 코드
from openpyxl.styles import PatternFill sh["C2"].fill = PatternFill(fill_type='solid', fgColor="00FF00") sh["C4"].fill = PatternFill(fill_type='solid', start_color="000000") # Save the workbook wb.save(filename="test_excel_2.xlsx")
Python
복사
GradientFill 클래스를 사용한 그라데이션 배경
Gradient(stop=('왼쪽 색상', '오른쪽 색상') 객체를 생성해 셀의 fill 속성에 할당
예시 코드
from openpyxl.styles import GradientFill sh["C6"].fill = GradientFill(stop=("00FF00", "000000")) # Save the workbook wb.save(filename="test_excel_2.xlsx")
Python
복사

1.3 셀 테두리 설정

openpyxl.stylesSideBorder 객체 이용
Side 객체를 사용해 테두리 스타일을 설정하고,
Border 객체로 스타일을 어디에 적용할지 지정해서 셀의 border 속성에 지정
예시 코드
from openpyxl.styles import Border, Side sh["E2"].border = Border(top=Side(border_style='thin', color='00FF00'), right=Side(border_style='dashed', color='FFC7CE'), bottom=Side(border_style='thick', color='008000'), left=Side(border_style='dotted', color='000000') ) # Save the workbook wb.save(filename="test_excel_2.xlsx")
Python
복사

1.4 셀 정렬

openpyxl.stylesAlignment 클래스 활용
왼쪽/가운데/오른쪽 정렬, 들여쓰기, 텍스트 회전 설정 가능
셀 객체의 alignment 속성에 Alignment 객체를 할당하면 해당 스타일이 적용됨
코드 예시
from openpyxl.styles import Alignment sh['G2'].value = '왼쪽정렬과 들여쓰기' sh['G2'].alignment = Alignment(horizontal='left', ## 왼쪽 정렬 indent=1, ## 한칸 들여쓰기 ) sh['G4'].value = '가운데정렬과 텍스트회전' sh['G4'].alignment = Alignment(horizontal='center', ## 가운데 정렬 text_rotation=45, ## 텍스트 회전 ) sh['G6'].value = '오른쪽정렬과 수직가운데정렬' sh['G6'].alignment = Alignment(horizontal='right', ## 오른쪽 정렬 vertical='center' ## 수직 가운데 정렬 ) # Save the workbook wb.save(filename="test_excel_2.xlsx")
Python
복사

1.5 셀 크기 조정

셀 너비 설정
시트의 column_dimensions 속성으로 열의 너비를 지정
코드 예시
# B 열의 너비를 50으로 설정 sh.column_dimensions['B'].width = 50 # Save the workbook wb.save(filename="test_excel_2.xlsx")
Python
복사
셀 높이 설정
시트의 row_dimensions 속성으로 행의 높이를 설정
코드 예시
# 2 행의 높이를 50으로 설정 sh.row_dimensions[2].height = 50 # Save the workbook wb.save(filename="test_excel_2.xlsx")
Python
복사

2. 숫자 형식 지정

셀의 numer_format 속성을 활용하여 날짜, 시간, 통화 등의 형식 설정
주요 형식 패턴
구분
패턴
설명
숫자
'0'
소수점 없는 정수
숫자
'0.00'
소수점 둘째 자리까지 표시
숫자
'#,##0'
천 단위 구분 기호가 있는 정수
숫자
'#,##0.00'
천 단위 구분 기호와 소수점 둘째 자리까지 표시
백분율
'0%'
정수 백분율
백분율
'0.00%'
소수점 둘째 자리까지의 백분율
통화
'"$"#,##0.00'
달러 기호와 소수점 둘째 자리까지 표시
통화
'#,##0.00€'
유로 기호와 소수점 둘째 자리까지 표시
날짜와 시간
'yyyy-mm-dd'
연-월-일 형식
날짜와 시간
'd-mmm-yy'
일-월(축약형)-년(끝 두 자리) 형식
날짜와 시간
'h:mm AM/PM'
시:분 오전/오후 형식
날짜와 시간
'h:mm:ss'
시:분:초 형식
과학적 표기법
'0.00E+00'
지수 표기법
코드 예시
# 새로운 시트 생성 sh_num = wb.create_sheet() # 일반 숫자 형식 sh_num['B1'] = 1234.5678 sh_num['B1'].number_format = '#,##0.00' # 백분율 형식 sh_num['B2'] = 0.4567 sh_num['B2'].number_format = '0.00%' # 통화 형식 sh_num['B3'] = 9876.54 sh_num['B3'].number_format = '"$"#,##0.00' # 날짜 형식 from datetime import datetime sh_num['B4'] = datetime(2025, 1, 24) sh_num['B4'].number_format = 'yyyy-mm-dd' # 과학적 표기법 sh['B5'] = 0.000123 sh['B5'].number_format = '0.00E+00' # Save the workbook wb.save(filename="test_excel_2.xlsx")
Python
복사

3. 조건부 서식

조건부 서식을 사용하면 엑셀에서 데이터를 더욱 시각적으로 표현하고 중요한 정보를 강조할 수 있는데, openpyxl으로도 다양한 조건부 서식 옵션을 활용하여 엑셀 문서의 가독성과 분석 효율성을 높일 수 있다.
openpyxl에서 조건부 서식을 사용하는 방법은 다음과 같다.
아래와 같은 시트를 추가하고서 파일을 읽은 후에 조건부 서식을 지정해보자

3.1 CellIsRule

특정 조건에 따라 셀 서식을 지정
예시 코드
from openpyxl.styles import PatternFill from openpyxl.formatting.rule import CellIsRule wb = op.load_workbook(filename = "test_excel_2.xlsx") ws = wb["조건부서식 테스트"] # 빨간색 배경 정의 red_fill = PatternFill(start_color="FFEE1111", end_color="FFEE1111", fill_type="solid") # 40보다 큰 값에 대해 빨간색 배경 적용 ws.conditional_formatting.add('A1:A10', CellIsRule(operator='greaterThan', formula=['40'], stopIfTrue=True, fill=red_fill)) # Save the workbook wb.save(filename="test_excel_2.xlsx")
Python
복사

3.2 ColorScaleRule

값의 범위에 따라 색상 그라데이션을 적용
코드 예시
from openpyxl.formatting.rule import ColorScaleRule # 최소값(노란색)에서 최대값(파란색)까지 색상 스케일 적용 ws.conditional_formatting.add('B1:B10', ColorScaleRule(start_type='min', start_color='FFFF00', end_type='max', end_color='0000FF')) # Save the workbook wb.save(filename="test_excel_2.xlsx")
Python
복사

3.3 FormulaRule

사용자 정의 수식을 기반으로 서식을 적용
코드 예시
from openpyxl.formatting.rule import FormulaRule # 짝수 행에 파란색 배경 적용 blue_fill = PatternFill(start_color="0000FF", end_color="0000FF", fill_type="solid") ws.conditional_formatting.add('A1:C10', FormulaRule(formula=['MOD(ROW(),2)=0'], fill=blue_fill)) # Save the workbook wb.save(filename="test_excel_2.xlsx")
Python
복사

3.4 기타

1) 데이터 막대

데이터 값을 시각적으로 표현하는 막대를 셀 내에 표시
코드 예시
from openpyxl.formatting.rule import DataBarRule ws.conditional_formatting.add('D1:D10', DataBarRule(start_type='min', end_type='max', color="00AA00"))
Python
복사

2) 아이콘 세트

값의 범위에 따라 다른 아이콘을 표시
코드 예시
from openpyxl.formatting.rule import IconSetRule ws.conditional_formatting.add('E1:E10', IconSetRule('3Arrows', 'num', [80, 100, 120])) # Save the workbook wb.save(filename="test_excel_2.xlsx")
Python
복사

4. 셀 병합과 분할

4.1 셀 병합

worksheet.merge_cells() 메서드 사용
코드 예시
# A12부터 D12까지 셀 병합 ws.merge_cells('A12:D12') # 병합된 셀에 값 입력 ws['A12'] = '병합된 셀' # 행과 열 번호로 셀 병합 ws.merge_cells(start_row=13, start_column=1, end_row=14, end_column=4) ws['A13'] = '다른 병합된 셀' # Save the workbook wb.save(filename="test_excel_2.xlsx")
Python
복사

4.2 셀 분할

worksheet.unmerge_cells() 메서드 사용
코드 예시
# A12부터 D12까지 병합된 셀 분할 ws.unmerge_cells('A12:D12') # 행과 열 번호로 병합된 셀 분할 ws.unmerge_cells(start_row=13, start_column=1, end_row=14, end_column=4) # Save the workbook wb.save(filename="test_excel_2.xlsx")
Python
복사
이상 openpyxl의 모듈들을 이용해 엑셀 파일의 서식을 원하는대로 지정할 수 있는 방법에 대해 알아보았다.
특히 반복적으로 엑셀 보고서 등을 만들거나 할 때 유용하게 쓰일 수 있을 것이다.