본문 바로가기
프로그래밍/엑셀(Excel)

[OpenPyXL] 5. 셀 값 수정, 배경, 테두리, 폰트, 텍스트 정렬 설정하기 (feat. color

by 부자 꽁냥이 2022. 10. 3.

이번 포스팅에서는 OpenPyXL을 이용하여 셀을 꾸밀 수 있는 여러 가지 기능을 보고자 한다. 여기에서는 셀 값 수정, 배경색 칠하기, 테두리 그리기, 폰트 설정 그리고 텍스트 정렬을 설정하는 방법을 알아보려 한다.

 

- 목차 -

1. 셀 값 수정(변경)하기 : value

2. 셀 배경색 넣기 : GradientFill, PatternFill

3. 셀 테두리 그리기 : Border, Side

4. 폰트 설정하기 : Font

5. 텍스트 정렬하기 : Alignment


   1. 셀 값 수정(변경)하기 : value

셀 값은 Cell 객체의 value 필드를 이용하여 값을 변경할 수 있다. 아래 코드는 'A2' 셀의 내용을 바꾸는 작업을 수행한다.

 

from openpyxl import load_workbook, Workbook

wb = load_workbook('sample_05.xlsx')
ws = wb['Sheet1'] ## Sheet1 선택

print(ws['A2'].value) ## 바뀌기 전 셀 값 출력
ws['A2'].value = '분석가 꽁냥이' ## ws.cell(2, 1).value 와 동일
print(ws['A2'].value) ## 바뀌고 난 셀 값 출력
wb.save('sample_05.xlsx')

 

 

기존 꽁냥이에서 분석가 꽁냥이로 값이 바뀌었다.


   2. 셀 배경색 넣기 : GradientFill, PatternFill

OpenPyXL은 셀 배경색을 다루기 위한 몇 가지 클래스를 제공하고 있다. 일반적인 배경색을 추가하는 PatternFill, 배경을 그라디언트 형식으로 추가하는 GradientFill 등이 있다. 

 

PattenFill과 GradientFill 의 기본적인 사용법은 다음과 같다. 이때 색상은 16진수로 표현된 문자열을 입력한다(# 제외).


PattenFill( start_color = '넣고 싶은 색', fill_type = 'solid' )

GradientFill ( stop= ( '그라디언트 왼쪽 색' , 그라디언트 오른쪽 색' ) )


아래 코드를 통해 그 사용법을 익힐 수 있는데 먼저 PatternFill, GradientFill 객체를 정의하고이를 Cell 객체의 fill 필드에 넣어주면 된다.

 

from openpyxl import load_workbook, Workbook
from openpyxl.styles import PatternFill, GradientFill

wb = load_workbook('sample_05.xlsx')
ws = wb['Sheet2'] ## Sheet2 선택

ws['A1'].fill = GradientFill(stop=('000000', 'FFFFFF')) ## 그라디언트 추가
ws['B1'].fill = PatternFill(start_color='FFC7CE', fill_type = 'solid') ## 배경색 추가
ws['C1'].fill = PatternFill(start_color='FFFFCE', fill_type = 'solid') ## 배경색 추가

wb.save('sample_05.xlsx')

 

위 코드를 실행시키면 아래와 같이 배경색이 변한 것을 알 수 있다.

 


   3. 셀 테두리 그리기 : Border, Side

셀 테두리는 2단계 과정을 거친다. 먼저 Side 객체를 이용하여 테두리 스타일을 정하고 Border 객체를 통하여 테두리를 어디에 적용할지를 결정한다. Border 객체에는 위, 아래, 좌우 방향에 개별적으로 Side 객체를 적용할 수 있다.

 

Side와 Border의 사용법은 다음과 같다. 


Side( border_style = ' 테두리 스타일 ', color = ' 테두리 색상 ' )

Border( top = 'Side 객체', right = 'Side 객체', bottom = 'Side 객체', left =  'Side 객체' )


Side 객체의 border_style 인자에 적용할 수 있는 테두리 스타일은 다음과 같고 실제 스타일을 보려면 그 아래 그림을 참고하면 된다.

 

slantDashDot
dashed
dashDotDot
medium
mediumDashDotDot
mediumDashDot
mediumDashed
hair
dotted
dashDot
double
thick
thin

 

 

이제 코드를 통해 사용법을 알아보자. 아래 코드는 'B2' 셀의 테두리 스타일을 적용한 것이다. 이때 Cell 객체 border 필드에 Border 객체를 할당하는 것을 주목하자.

 

from openpyxl import load_workbook, Workbook
from openpyxl.styles import Border, Side

wb = load_workbook('sample_05.xlsx')
ws = wb['Sheet3'] ## Sheet3 선택

ws['B2'].border = Border(top=Side(border_style='dashed', color='00FF00'),
                         right=Side(border_style='thin', color='FFC7CE'),
                         bottom=Side(border_style='thick', color='008000'),
                         left=Side(border_style='dotted', color='000000')
                        )
wb.save('sample_05.xlsx')

 

위 코드를 실행하면 아래와 같이 테두리가 변한 것을 알 수 있다.

 

 

Border 객체는 diagonal 인자를 이용하여 대각선도 넣을 수 있다. 이때 diagonalDown(좌상단에서 우하단으로 내려가는 대각선) 또는 diagonalUp(좌하단에서 우상단으로 올라가는 대각선) 인자를 True 설정해야 대각선이 적용된다. 아래 코드는 두 대각선을 추가하는 작업을 수행한다.

 

from openpyxl import load_workbook, Workbook
from openpyxl.styles import Border, Side

wb = load_workbook('sample_05.xlsx')
ws = wb['Sheet3'] ## Sheet3 선택

ws['B2'].border = Border(top=Side(border_style='dashed', color='00FF00'),
                         right=Side(border_style='thin', color='FFC7CE'),
                         bottom=Side(border_style='thick', color='008000'),
                         left=Side(border_style='dotted', color='000000'),
                         ## 대각선 추가
                         diagonal=Side(border_style='mediumDashed', color='FF00FF'),
                         diagonalDown=True, ## 좌상단에서 우하단으로 가는 대각선
                         diagonalUp=True ## 좌하단에서 우상단으로 가는 대각선
                        )
wb.save('sample_05.xlsx')

 


   4. 폰트 설정하기 : Font

1) 폰트 스타일 

먼저 폰트 스타일을 바꿔보자. OpenPyXL에서는 Font 객체를 이용하여 폰트 스타일을 바꿀 수 있다. Font 객체에의 underline인자는 밑줄 스타일을 지정할 수 있는데 다음과 같이 4가지 스타일이 있다. 


'doubleAccounting', 'single', 'singleAccounting', 'double'


single이 포함되어 있으면 밑줄은 한 개 이고 double이면 이중 밑줄이다. 또한 Accounting이 포함되어 있다면 밑줄을 셀 가로 사이즈에 맞게 그린다는 것이며 Accounting 없다면 글자 수에 맞게 밑줄이 그어지는 것이다.

 

이제 아래 코드를 통해 사용법을 익혀보자. Cell 객체의 font 필드에 Font 객체를 할당하는 것을 주목하자.

 

from openpyxl.styles import Font

wb = load_workbook('sample_05.xlsx')
ws = wb['Sheet4'] ## Sheet4 선택

ws['B2'].font = Font(name='나눔손글씨 붓', ## 폰트 명
                     size=20, ## 폰트 사이즈
                     color='00FFFF', ## 폰트 색상
                     underline='doubleAccounting', ## 이중 밑줄 셀 끝까지 적용
                    )

ws['C2'].font = Font(name='맑은고딕', size=12, color='FC66FF',
                     bold=True, ## 글짜 두껍게 하기
                     underline='single', ## 밑줄 글자 수에 맞춰서 적용
                     outline=True,
                    )

ws['D2'].font = Font(name='나눔바른펜', size=12, color='FC66FF',
                     bold=True, ## 글짜 두껍게 하기
                     underline='singleAccounting', ## 밑줄 셀 끝까지 적용
                     strike=True, ## 취소선
                    )
ws['E2'].font = Font(name='나눔바른펜', size=18, color='008000',
                     bold=True, ## 글짜 두껍게 하기
                     underline='double', ## 이중 밑줄 글자 수에 맞춰서 적용,
                     italic=True, ## 이탤릭체 = 기울이기
                    )
wb.save('sample_05.xlsx')

 

 


   5. 텍스트 정렬하기 : Alignment

OpenPyXL은 Alignment를 통해 텍스트를 정렬할 수 있다. Alignment의 horizontal 인자는 수평 정렬을 vertical 인자는 수직 정렬을 지정할 수 있으며 'left', 'center', 'right'의 인자 값을 가질 수 있다. 그 의미는 이름에서 알 수 있듯이 각각 왼쪽 정렬, 가운데 정렬, 오른쪽 정렬이다.

 

Alignment에는 그 밖에도 들여쓰기, 텍스트 회전도 설정할 수 있는데 아래 코드를 보면 금방 이해할 수 있다. 마찬가지로 Cell 객체의 alignment 필드에 Alignment 객체를 할당하는 것을 주목하자.

 

from openpyxl.styles import Alignment

wb = load_workbook('sample_05.xlsx')
ws = wb['Sheet5'] ## Sheet5 선택

ws['A2'].alignment = Alignment(horizontal='left', ## 왼쪽 정렬
                     indent=1, ## 한칸 들여쓰기
                    )
ws['A3'].alignment = Alignment(horizontal='center', ## 가운데 정렬
                     text_rotation=45, ## 텍스트 회전
                    )
ws['A4'].alignment = Alignment(horizontal='right', ## 오른쪽 정렬
                               vertical='center' ## 수직 가운데 정렬
                    )
wb.save('sample_05.xlsx')

 


댓글


맨 위로