이 글에서는 파이썬 모듈 중 하나인 XlsxWirter에 대해서 살펴보겠습니다. 가벼운 정의부터 설치방법, 그리고 사용방법까지 확인해 봅니다. XlsxWriter를 사용하면 엑셀 업무를 훨씬 편하게 할 수 있으니 전체적으로 살펴보실 것을 추천합니다.
궁금한 내용이 정해져 있으시다면 목차에서 원하는 부분만 선택하셔서 읽으셔도 좋습니다.
목차
XlsxWriter가 뭐야?
그렇구나... 근데 XLSX 파일이 뭐야?
XlsxWriter로 어떤 걸 할 수 있어?
어떻게 설치해야 하는 거야?
어떤 식으로 사용하는 거야?
엑셀 워크북을 만들어 시트 추가하기
셀에 값을 입력하기
셀을 병합하고 값 입력하기
열 넓이 설정하기
폰트 설정하기
셀 테두리 그리기
셀 색 설정하기
문자 정렬 설정하기
엑셀 함수 넣기
차트 그리기
원 차트(파이 차트) 그리기
이미지 넣기
어떤 버전을 지원하는 거야?
XlsxWriter가 뭐야?
XlsxWriter란 Excel의 XLSX파일을 작성할 수 있게 해주는 파이썬 모듈입니다. 지정한 셀에 수치나 문자열을 입력할 수 있습니다. 단순한 입력 이외에도 엑셀에서 지원하는 다양한 기능을 사용해 입력할 수 있습니다.
XlsxWriter를 능숙하게 다룰 수 있다면 엑셀 작성 업무를 자동화해서 작업량을 훨씬 줄일 수 있습니다. 아주 능숙해지지 못하더라도 이 글에서 소개하는 기본적인 사용법만 알아도 엑셀 문서의 기본 뼈대는 파이썬으로 작성해 두고 약간 수정하는 방식으로 작업 효율을 높일 수 있습니다.
여기서는 Xlsx의 기본 기능을 전반적으로 소개하고 있습니다. 우선은 전체 기능을 한 번 훑어 보시고 어떻게 활용할지를 확인해보시면 좋을 것 같습니다.
※ XlsxWriter 등 파이썬 모듈을 활용하면 업무량을 획기적으로 줄일 수 있지만 사장님한테 걸리면 업무량이 오히려 늘어날 수 있으니 주의해 주세요!
그렇구나... 근데 XLSX 파일이 뭐야
XLSX는 마이크로 소프트의 엑셀 형식의 파일입니다. 조금 더 정확히는 Microsoft Excel Open XML 형식의 스프레드 시트 파일입니다. 엑셀의 2007 이상에서 작성된 XML 기반의 스프레드 시트 파일입니다.
XlsxWriter로 어떤 걸 할 수 있어?
텍스트, 수치, 수식, 하이퍼링크 등을 복수 워크시트에 입력하는 것이 가능합니다. 서식 설정 등의 기능도 지원합니다. 또한 일반적으로 엑셀에서 동작하는 식을 작성할 수도 있습니다.
어떻게 설치해야 하는 거야?
당연하겠지만 기본적으로 PC 등에 파이썬이 설치되어 있어야 합니다. 그리고 아래와 같이 pip로 XlsxWriter 모듈을 인스톨 합니다.
윈도우
pip install XlsxWriter
맥
sudo pip install XlsxWriter
리눅스
sudo pip install XlsxWriter
어떤 식으로 사용하는 거야?
파일을 만드는 방법부터 값, 차트, 이미지를 입력하는 방법까지 다룹니다. 가능하면 하나씩 직접 실행해보는 것을 추천합니다.
※ 이름이 같은 엑셀 파일이 열려 있는 상태에서 코드를 동작시키면 에러가 발생하니 주의하세요.
엑셀 워크북을 만들어 시트 추가하기
워크북을 만들 때는 최소 하나 이상의 워크시트가 만들어집니다. 만약 아래처럼 따로 지정해 주지 않는다면 언제나 보는 Sheet1 등의 이름으로 만들어 집니다.
#xlsxwriter 모듈 가지고 오기
import xlsxwriter
#워크북 만들기
workbook = xlsxwriter.Workbook('demo.xlsx')
#시트 추가하기
worksheet1 = workbook.add_worksheet('NewSheet1')
#사용한 후에는 꼭 닫아주어야 합니다.
workbook.close()
※만약 기존 파일이 있다면 덮어쓰기 때문에 주의하세요.
코드를 실행하면 아래와 같이 xlsx 파일이 만들어집니다.
셀에 값을 입력하기
값을 입력할 셀을 지정하는 방법은 2가지가 있습니다.
- 0, 0 처럼 행과 열을 입력
- 'A2'처럼 셀의 위치를 입력
#xlsxwriter 모듈 가지고 오기
import xlsxwriter
#워크북 만들기
workbook = xlsxwriter.Workbook('demo.xlsx')
#시트 추가하기
worksheet1 = workbook.add_worksheet('NewSheet1')
# 셀에 입력하기
worksheet1.write(0, 0, 'A1셀에 입력')
worksheet1.write('A2', 'A2셀에 입력')
#사용한 후에는 꼭 닫아주어야 합니다.
workbook.close()
for 반복문을 사용해서 연속해서 입력할 수도 있습니다.
# xlsxwriter 모듈 가져오기
import xlsxwriter
#워크북 가지고 오기
workbook = xlsxwriter.Workbook('demo.xlsx')
#워크북 추가하기
worksheet1 = workbook.add_worksheet('NewSheet1')
#입력할 내용을 리스트로 만듭니다.
insert_contents = [
['이름', '나이'],
['유재석', 49],
['강호동', 55],
['정준하', 44],
['정형돈', 50]
]
#for 반복문으로 리스트 내용을 입력합니다.
row = 0
for name, age in insert_contents:
worksheet1.write(row, 0, name)
worksheet1.write(row, 1, age)
row += 1
#워크북은 꼭 닫아주어야 합니다
workbook.close()
셀을 병합하고 값 입력하기
셀 병합은 엑셀에서 가장 많이 쓰는 기능 중 하나입니다. 셀을 병합하고 값을 입력할 때는 . merge_range()를 사용합니다. 예에서는 A1셀에서 C10셀까지를 병합하고 '입력 내용'이라는 문자열을 입력하고 있습니다.
셀을 지정하는 방법은 두 가지입니다.
- 'A1:C10'처럼 셀의 위치를 문자열로 입력
- 0, 0, 4, 2 처럼 셀을 인덱스로 지정(코드에서 주석으로 표기된 부분)
#xlsxwriter 모듈 가지고 오기
import xlsxwriter
#워크북 만들기
workbook = xlsxwriter.Workbook('demo.xlsx')
#시트 추가하기
sheet1 = workbook.add_worksheet('NewSheet1')
#셀을 병합해서 값 입력하기
sheet1.merge_range('A1:C10', '입력 내용') # 셀을 문자열로 지정
# sheet.merge_range(0, 0, 4, 2, '입력 내용') # 셀을 인덱스로 지정
#사용한 후에는 꼭 닫아주어야 합니다.
workbook.close()
열 넓이 설정하기
열의 넓이도 설정할 수 있습니다. 앞서 본 코드에 추가를 해보겠습니다.
#xlsxwriter 모듈 가지고 오기
import xlsxwriter
#워크북 만들기
workbook = xlsxwriter.Workbook('demo.xlsx')
#시트 추가하기
worksheet1 = workbook.add_worksheet('NewSheet1')
#셀에 내용을 입력하기
worksheet1.write(0, 0, 'A1셀에 입력')
worksheet1.write('A2', 'A2셀에 입력')
#열 넓이를 설정
worksheet1.set_column('A:A', 50)
#사용한 후에는 꼭 닫아주어야 합니다.
workbook.close()
폰트 설정하기
write 메서드의 인자로 포멧을 전달해서 설정합니다.
A1의 설정처럼 딕셔너리 형태를 사용할 수도 있고
B1의 설정처럼 여러 메서드를 이용해서 설정할 수도 있습니다.
#xlsxwriter 모듈 가지고 오기
import xlsxwriter
#워크북 만들기
book = xlsxwriter.Workbook('demo.xlsx')
#시트 추가하기
sheet1 = book.add_worksheet('NewSheet1')
#포멧을 딕셔너리 형태로 만들어서 전달
format = book.add_format({'bold': True})
sheet1.write('A1', 'A1에 입력', format)
#포멧을 메서드를 이용해서 전달
format = book.add_format()
format.set_bold()
format.set_font_color('blue')
format.set_font_name('Arial')
sheet1.write('B1', 'B1에 입력', format)
#사용한 후에는 꼭 닫아주어야 합니다.
book.close()
셀 테두리 그리기
같은 방법으로 셀 테두리를 그릴 수 있습니다.
#xlsxwriter 모듈 가지고 오기
import xlsxwriter
#워크북 만들기
workbook = xlsxwriter.Workbook('demo.xlsx')
#시트 추가하기
sheet1 = workbook.add_worksheet('NewSheet1')
#셀 테두리 포멧을 딕셔너리 형태로 전달하기
format = workbook.add_format({'border': 1})
sheet1.write('B2', 'B2에 입력', format)
#셀 테두리 포멧을 메서드를 이용해 전달하기
format = workbook.add_format()
format.set_bottom()
format.set_top(2)
format.set_left(3)
format.set_right(6)
sheet1.write('C3', 'C3에 입력', format)
#사용한 후에는 꼭 닫아주어야 합니다.
workbook.close()
B2에서처럼 딕셔너리로 설정을 한다면 네면에 동일한 테두리가 적용됩니다.
C3처럼 메서드를 이용해서 상하좌우를 따로 설정할 수도 있습니다.
셀 색 설정하기
마찬가지로 딕셔너리를 이용하는 방법과 메서드를 이용하는 방법이 있습니다.
#xlsxwriter 모듈 가지고 오기
import xlsxwriter
#워크북 만들기
workbook = xlsxwriter.Workbook('demo.xlsx')
#시트 추가하기
sheet1 = workbook.add_worksheet('NewSheet1')
#포멧을 딕셔너리 형태로 전달하기
format = workbook.add_format({'pattern': 1, 'bg_color': 'yellow'})
sheet1.write('B2', 'B2에 입력', format)
#포멧을 메서드를 이용해서 전달하기
format = workbook.add_format()
format.set_pattern(2)
format.set_bg_color('blue')
sheet1.write('C3', 'C3에 입력', format)
format = workbook.add_format()
format.set_pattern(3)
format.set_bg_color('red')
sheet1.write('D4', 'D4에 입력', format)
#사용한 후에는 꼭 닫아주어야 합니다.
workbook.close()
셀 B2에는 pattern1을 설정해 전체를 노란색으로 칠하고 있습니다. C3과 D4에는 각각 pattern2, 3을 설정해서 칠해지는 모습이 조금 다릅니다.
문자 정렬 설정하기
write 메서드에 포멧을 설정해서 셀 안의 문자의 정렬을 지정할 수 있습니다.
#xlsxwriter 모듈 가지고 오기
import xlsxwriter
#워크북 만들기
workbook = xlsxwriter.Workbook('demo.xlsx')
#시트 추가하기
sheet1 = workbook.add_worksheet('NewSheet1')
#중앙 정렬
format = workbook.add_format({'align': 'center'})
sheet1.write('B2', 'B2에 입력', format)
#오른쪽 정렬
format = workbook.add_format()
format.set_align('right')
sheet1.write('C3', 'C3에 입력', format)
#세로로 중앙 정렬
format = workbook.add_format()
format.set_align('vcenter')
sheet1.write('D4', 'D4에 입력', format)
#세로로 위쪽 정렬
format = workbook.add_format()
format.set_align('top')
sheet1.write('E5', 'E5에 입력', format)
#사용한 후에는 꼭 닫아주어야 합니다.
workbook.close()
※ 서식이 적용된 것을 확인하기 위해서 셀을 넓이는 수동으로 늘렸습니다. 셀 넓이 조절은 위쪽에 있으니 참고해주세요.
엑셀 함수 넣기
여기서는 대표적인 함수인 sum을 입력해 보겠습니다.
#xlsxwriter 모듈 가지고 오기
import xlsxwriter
#워크북 만들기
workbook = xlsxwriter.Workbook('demo.xlsx')
#시트 추가하기
sheet1 = workbook.add_worksheet('NewSheet1')
#셀에 값 입력하기
sheet1.write('B3', 10)
sheet1.write('B4', 100)
sheet1.write('B5', 1000)
#셀에 SUM함수를 입력하기
sheet1.write('B6', '=sum(B3,B4,B5)')
#사용한 후에는 꼭 닫아주어야 합니다.
workbook.close()
차트 그리기
xlsxwriter를 이용해서 차트를 삽입할 수도 있습니다.
#xlsxwriter 모듈 가지고 오기
import xlsxwriter
#워크북 만들기
workbook = xlsxwriter.Workbook('demo.xlsx')
#시트 추가하기
worksheet1 = workbook.add_worksheet()
#데이터를 열에 입력합니다.
data = [20, 30, 50, 10, 10, 40]
worksheet1.write_column('A1', data)
#차트의 타입을 설정하고 객체를 만듭니다.
chart = workbook.add_chart({'type': 'line'})
#차트에 데이터를 지정해줍니다.
chart.add_series({'values': '=Sheet1!$A$1:$A$6'})
#워크시트에 차트를 입력합니다.
worksheet1.insert_chart('C1', chart)
#사용한 후에는 꼭 닫아주어야 합니다.
workbook.close()
입력한 차트는 아래와 같은 모양이 됩니다.
원 차트(파이 차트) 그리기
#xlsxwriter 모듈 가져오기
import xlsxwriter
#차트 만들기
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()
bold = workbook.add_format({'bold': 1})
#차트가 참고할 데이터 작성하기
headings = ['분류', '점유율']
data = [
['삼성', '애플', '샤오미'],
[60, 30, 10],
]
#데이터를 엑셀에 입력하기
worksheet.write_row('A1', headings, bold)
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
#차트 객체 만들기, 원(파이) 차트로 설정
pi_chart = workbook.add_chart({'type': 'pie'})
#파이 차트의 내용과 제목을 설정한다
#({
# 'name': '차트 이름을 여기에 입력',
# 'categories' : [범주를 표시하기 위해서 참조할 시트와 셀의 위치를 입력],
# 'values' : [값을 표시하기 위해서 참조할 시트와 셀의 위치를 입력],
#})
pi_chart.add_series({
'name': '스마트폰 점유율',
'categories': ['Sheet1', 1, 0, 3, 0],
'values': ['Sheet1', 1, 1, 3, 1],
})
# 차트 제목을 입력
pi_chart.set_title({'name': '한국 스마트폰 점유율'})
# 차트의 스타일을 지정. 예에서는 하얀색 외곽선과 그림자를 지정
pi_chart.set_style(10)
# 차트를 워크시트에 삽입
# offset(지정 지점에서의 거리)를 같이 설정해주면 좋습니다.
worksheet.insert_chart('C2', pi_chart, {'x_offset': 30, 'y_offset': 20})
#사용 후에는 꼭 닫아주어야 합니다.
workbook.close()
이미지 넣기
xlsxwriter를 이용해서 이미지를 입력할 수도 있습니다.
#xlsxwriter 모듈 가지고 오기
import xlsxwriter
#워크북 만들기
workbook = xlsxwriter.Workbook('demo.xlsx')
#시트 추가하기
worksheet1 = workbook.add_worksheet()
#이미지 삽입하기, 이미지의 위치를 정확히 지정해 주어야 합니다.
worksheet1.insert_image('B2', 'test-image.png')
#사용한 후에는 꼭 닫아주어야 합니다.
workbook.close()
어떤 버전을 지원하는 거야?
Python 2.5, 2.6, 2.7, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, Jython, PyPy을 지원하고 표준 라이브러리만을 사용합니다.
같이보면 좋은 글
더 자세한 사용 방법은 아래 링크를 참고해 주세요.
https://xlsxwriter.readthedocs.io/