Python openpyxl 엑셀 생성 방법(Tutorial)

Python openpyxl을 보고서 작성용으로 사용하시나요? 파이썬 openpyxl 엑셀 생성 방법을 함께 알아보겠습니다.

Python openpyxl 엑셀 생성(Tutorial) 개요

보고서를 엑셀로 만드는 경우라면, 먼서 새로운 워크북을 만들고, 새로운 시트에 엑셀 문서를 작성해야겠죠? 그리고 보고서에 들어갈 값들을 입력해 줘야 합니다. 간단히 막대그래프를 추가하는 것까지 전체적으로 튜토리얼의 느낌으로 따라와 주시면 됩니다.

엑셀 파일 생성(=Workbook 생성)

우선 새로운 엑셀 파일을 생성하기 위해서는 openpyxl의 Workbook 객체를 만들어야 합니다.

from openpyxl import Workbook
wb = Workbook()
Python

활성화 시트 얻기

기본적으로 Workbook을 생성하면 “Sheet“라는 이름의 시트 하나가 자동으로 생성됩니다. 여러분이 엑셀을 처음 실행해서 아무것도 작성하지 않았을 때 Sheet1이 기본적으로 보이는 것과 마찬가지입니다.

이는 간단히 활성화 시트를 얻는 작업으로 가져오면 됩니다.

ws = wb.active
Python

쉽죠? 이제 워크시트인 ws에 여러분이 작성할 보고서의 내용을 채워주면 됩니다.

저는 작업시트의 이름을 아래와 같이 지정했습니다.

ws.title = "분석결과(2018-2022)"
Python

보고서 제목 작성하기

보고서 제목을 작성해 줍니다. 여기에서는 제목을 1행에 작성해 줍니다.

ws["A1"].value = "백테스트 결과(2018-2022)"
Python

그림 1과 같이 제목이 들어갑니다.

그림 1. Python openpyxl 엑셀 생성: 보고서 제목 작성 결과
그림 1. Python openpyxl 엑셀 생성: 보고서 제목 작성 결과

시트에 값 채우기

저는 주식 매매 백테스트 결과를 간단히 보고서로 작성해 보려고 합니다. 사용할 데이터는 다음과 같이 준비했습니다. 엑셀 작성을 위해 가짜로 작성한 것이니 데이터 자체에 의미를 두지 마시기 바랍니다.

items = [
    ["RSI 돌파 전략 1", 23.43, 48.21, 35891],
    ["RSI 돌파 전략 2", 43.32, 38.34, 3183412],
    ["RSI 돌파 전략 3", 83.16, 18.56, 3527631],
    ["변동성 돌파 전략 1", 53.38, 4.78, 30975535],
    ["변동성 돌파 전략 2", 93.98, 8.89, 53423928],
    ["변동성 돌파 전략 3", 133.78, 13.01, 90386179],
]
Python

위의 items를 시트에 이어서 작성해 보도록 하겠습니다.

ws["A3"].value = "Model"
ws["B3"].value = "CAGR"
ws["C3"].value = "MDD"
ws["D3"].value = "Return"
for item in items:
  ws.append(item)

wb.save("example.xlsx")
Python

파일로 저장해 보면 아래와 같이 저장된 내용을 확인할 수 있습니다.

그림 2. Python openpyxl 엑셀 생성: 데이터 추가
그림 2. Python openpyxl 엑셀 생성: 데이터 추가

차트 만들기

이번에는 입력된 값을 기준으로 차트를 만들어 보겠습니다. 각 전략별로 성능의 차이를 보고 싶기 때문에 막대그래프를 사용할 것입니다.

from openpyxl.chart import BarChart, Series, Reference

chart = BarChart()
chart.type = 'col'
chart.title = 'CAGR 비교'
chart.y_axis.title = 'CAGR(%)'
chart.x_axis.title = '전략'
chart.legend = None

data = Reference(ws, min_col=2, max_col=2, min_row=4, max_row=9)
strategy = Reference(ws, min_col=1, max_col=1, min_row=4, max_row=9)

chart.add_data(data)
chart.set_categories(strategy)

ws.add_chart(chart, 'E1')
Python

세로 모양의 막대그래프이며, 범례를 따로 두지는 않았습니다. 데이터의 범위와 카테고리의 범위를 설정해 준 후, 차트를 추가할 위치를 지정해 주면, 차트가 추가됩니다.

그림 3. Python openpyxl 엑셀 생성: 그래프 추가
그림 3. Python openpyxl 엑셀 생성: 그래프 추가

그림 3을 보시면 데이터 입력이 되긴 했지만, 각 셀의 폭이 너무 좁아서 값이 보이지 않는 불편함이 있죠? 이 부분을 수정해 보도록 하겠습니다. 앞으로 서식을 다루는 포스팅에서 다루긴 하겠지만, 여기에서는 간단히 열의 폭을 조정해 보도록 하겠습니다.

ws.column_dimensions["A"].width = 18
ws.column_dimensions["D"].width = 12
Python

A열의 폭은 18로, D열의 폭은 12로 설정해 주었습니다. 대략 글자수 정도로 생각하고 작업하시면 됩니다. 실제 폰트 설정에 따라 글자 크기는 달라지므로, 설정하면서 적정 사이즈를 설정해 주셔야 합니다.

그림 4. Python openpyxl 엑셀 생성: column width 설정
그림 4. Python openpyxl 엑셀 생성: column width 설정

정리

새로운 워크북을 만들고, 활성화 시트를 가져와서 값을 입력해 주고, 값을 토대로 그래프를 추가하는 작업까지 해 보았습니다. 아, 아주 미세하지만 셀의 값이 잘 보이도록 열의 폭(width)을 조정하는 과정까지 진행했습니다. Python openpyxl 엑셀 생성 과정이 어렵다고 생각하셨던 분들께 도움이 되길 바랍니다.

관련 자료

Python openpyxl Simple Usage 문서를 참고했습니다.

같이 읽으면 좋은 글

Leave a Comment