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

[XlsxWriter] 셀 포맷(Cell Format - 폰트, 숫자 형식, 숨기기, 정렬, 배경색, 테두리) 변경하기 (feat. add_format)

by 부자 꽁냥이 2022. 11. 11.

XlsxWriter 파이썬(Python) 모듈은 add_format 메서드를 이용하여 엑셀(Excel)의 구성요소인 셀(Cell) 안에 입력되는 텍스트 폰트, 숫자 형식, 셀 공식 숨기기, 정렬, 배경색 그리고 테두리와 같은 셀 포맷을 변경할 수 있다. 이번 포스팅에서는 add_format을 이용하여 셀 포맷을 설정하는 방법을 알아보자.

 

- 목차 -

1. 셀 폰트 설정

2. 셀 숫자 형식

3. 정렬하기

4. 배경색, 전경색 설정하기

5. 테두리 그리기


   1. 셀 폰트 설정

XlsxWriter에서 제공하는 셀 폰트 설정 기능은 다음과 같다.

 

이제 코드를 보면서 기능을 파악해보자. 셀 폰트는 셀 포맷의 일부이다. 이때 셀 포맷은 딕셔너리를 이용하는 방법과 set 메서드를 이용하는 방법이 있다. 셀 포맷은 기본적으로 add_format을 이용하여 정의한다.

 

아래 코드는 '나눔손글씨 붓' 폰트와 '나눔바른고딕'을 적용한 뒤 셀 값을 입력하고 저장한다. 주석을 참고하여 폰트 관련 어떤 부분을 설정할 수 있는지 확인할 수 있다. 여기서 다루지 않는 설정은 여기를 참고하기 바란다.

 

from xlsxwriter import Workbook

name = 'font_style'
wb = Workbook(f'{name}.xlsx')
ws = wb.add_worksheet(f'{name}')

## 딕셔너리로 셀 포맷 정의
cell_format_dict1 = {
    'font_name':'나눔손글씨 붓', ## 폰트명
    'font_size':20, ## 폰트 사이즈
    'font_color':'red', ## 폰트 색상
    'bold': True, ## 글자 굵게
    'underline':True ## 밑줄
}
cell_format1 = wb.add_format(cell_format_dict1)

## set 메서드로 셀 포맷 정의
cell_format2 = wb.add_format()
cell_format2.set_font_name('나눔바른고딕')
cell_format2.set_font_strikeout(True)

ws.write(0, 0, '안녕하세요.', cell_format1)
ws.write(2, 2, '바보입니다.', cell_format2)

wb.close()

 

코드를 실행하고 엑셀 파일을 열면 아래와 같이 셀 폰트 관련 설정이 잘 적용된 것을 알 수 있다.

 


   2. 셀 숫자 형식

XlsxWriter에서 제공하는 숫자 형식 설정 관련 기능은 다음과 같다. 사실 하나밖에 없다.

 

 

셀 숫자 형식은 엑셀에서 셀 서식에 들어가면 사용자 지정 형식이 있는데 이를 문자열로 넘겨주면 된다. 

 

 

아래 코드를 통하여 사용법을 익혀보자. 아래 코드는 소수 둘째 자리까지 표현하는 것과 날짜 표시 형식을 지정한 두 가지 셀 포맷을 정의한 다음 셀 값을 입력하고 엑셀 파일로 저장한다.

 

name = 'number'
wb = Workbook(f'{name}.xlsx')
ws = wb.add_worksheet(f'{name}')

## 딕셔너리로 셀 포맷 정의
cell_format_dict1 = {
    'num_format':'0.00' ## 소수 둘째 자리까지 표현
}
cell_format1 = wb.add_format(cell_format_dict1)

## set 메서드로 셀 포맷 정의
cell_format2 = wb.add_format()
cell_format2.set_num_format('yyyy"년"mm"월"dd"일"') ## 날짜 포맷


ws.write(0, 0, '3.141592', cell_format1)
ws.write(2, 2, '36892.521', cell_format2)

wb.close()

 

 

이때 셀에 느낌표 표시가 있다면 셀을 더블 클릭 하면 제대로 표시된다.


   3. 정렬하기

XlsxWriter에서 제공하는 셀 정렬 관련 기능은 다음과 같다.

 

 

이제 코드를 보면서 기능을 파악해보자. 아래 코드는 수평 왼쪽 정렬, 수직 가운데 정렬 셀 포맷과 수평 왼쪽 정렬, 45도 회전 셀 포맷을 정의하고 셀 값을 입력한 뒤 엑셀 파일을 저장한다. 여기서 다루지 않는 설정은 여기를 참고하기 바란다.

 

name = 'align'
wb = Workbook(f'{name}.xlsx')
ws = wb.add_worksheet(f'{name}')

## 딕셔너리로 셀 포맷 정의
cell_format_dict1 = {
    'align':'left', ## 왼쪽 정렬
    'valign':'center' ## 수직 가운데 정렬
}
cell_format1 = wb.add_format(cell_format_dict1)

## set 메서드로 셀 포맷 정의
cell_format2 = wb.add_format()
cell_format2.set_align('center') ## 가운데 정렬
cell_format2.set_rotation(45) ## 회전

ws.write(0, 0, '우앙', cell_format1)
ws.write(2, 2, '응가', cell_format2)

wb.close()

 

코드를 실행하면 다음과 같이 정렬 관련 설정이 잘 적용된 것을 알 수 있다.

 


   4. 배경색, 전경색 설정하기

XlsxWriter에서 제공하는 배경색과 전경색 관련 설정 기능은 다음과 같다.

 

 

전경색은 배경색 앞쪽에 있는 색상이며 색상을 지정하는 경우 우리 눈에 보이는 색상이다. 배경색은 뒤에 있는 색이며 전경색과 배경색이 둘 다 설정되어 있으면 배경색은 보이지 않는다.

 

이제 코드를 보면서 기능을 파악해보자. 아래 코드는 전경색과 배경색을 설정한 셀 포맷을 정의한 것이다. 이때 패턴 관련 옵션도 있는데 이는 0부터 18번까지 총 19개의 패턴을 제공한다. 또한 패턴 색상은 배경색으로 설정한다는 것을 주목하자. 여기서 다루지 않는 설정은 여기를 참고하기 바란다.

 

name = 'bg_fg'
wb = Workbook(f'{name}.xlsx')
ws = wb.add_worksheet(f'{name}')

## 딕셔너리로 셀 포맷 정의
cell_format_dict1 = {
    'fg_color':'#D7E4BC', ## 전경색 색상
}
cell_format1 = wb.add_format(cell_format_dict1)

## set 메서드로 셀 포맷 정의
cell_format2 = wb.add_format()
cell_format2.set_bg_color('#FFFF00') ## 배경색 색상

ws.write(0, 0, 'cell_format1', cell_format1)
ws.write(0, 1, 'cell_format2', cell_format2)
for i in range(0, 19): ## 1~18 패턴 적용
    cell_format = wb.add_format()
    cell_format.set_fg_color('#FFFFFF')
    cell_format.set_bg_color('black')
    cell_format.set_pattern(i)
    ws.write(i+1, 0, '', cell_format)
    ws.write(i+1, 1, f'pattern_{i}')
wb.close()

 


   5. 테두리 그리기

XlsxWriter에서 제공하는 테두리 관련 설정 기능은 다음과 같다.

 

 

아래 코드는 테두리 관련 셀 포맷을 정의한 것이다. 테두리는 border를 통해 일괄적으로 테두리 스타일을 지정할 수도 있고 top, bottom, left, right를 이용하여 4방향 테두리를 개별적으로 설정할 수도 있다. 이때 테두리 스타일은 0부터 13번까지 총 14개의 스타일을 지원한다. 테두리 두께 조절은 따로 지원하지 않는 것 같다. 따라서 테두리 스타일 중에서 본인이 원하는 굵기를 갖는 스타일을 고르면 된다. 여기서 다루지 않는 설정은 여기를 참고하기 바란다.

 

name = 'border'
wb = Workbook(f'{name}.xlsx')
ws = wb.add_worksheet(f'{name}')

## 딕셔너리로 셀 포맷 정의
cell_format_dict1 = {
    'border':1, ## 테두리 스타일
    'border_color':'#FF0000' ## 테두리 색상
}
cell_format1 = wb.add_format(cell_format_dict1)

## set 메서드로 셀 포맷 정의
cell_format2 = wb.add_format()
cell_format2.set_top(3) ## 위쪽 테두리 스타일
cell_format2.set_right(4) ## 오른쪽 테두리 스타일
cell_format2.set_bottom(6) ## 아래쪽 테두리 스타일
cell_format2.set_left(3) ## 왼쪽 테두리 스타일
cell_format2.set_top_color('#FFFF00') ## 위쪽 테두리 스타일
cell_format2.set_right_color('#FF0000') ## 오른쪽 테두리 스타일
cell_format2.set_bottom_color('#FF00FF') ## 아래쪽 테두리 스타일
cell_format2.set_left_color('##FFBB00')  ## 왼쪽 테두리 스타일

ws.write(1, 1, 'format1', cell_format1)
ws.write(2, 2, 'format2', cell_format2)
for i in range(0, 14): ## 0~13 테두리 스타일
    row_offset = i//3
    col_offset = i%3
    cell_format = wb.add_format({'border':i})
    ws.write(3+row_offset*2, 1+col_offset*2, f'border_{i}', cell_format)
    
wb.close()

 


댓글


맨 위로