파이썬으로 파워포인트 자동화 – 차트 그리기 (데이터 업데이트)

파워포인트로 미리 보고서 템플릿을 작성한 후, 이 안에 있는 차트 데이터만 업데이트 하는 방법을 파이썬으로 구현했다.

stackoverflow에 이에 대한 질문이 올라왔는데, 파이썬으로 파워포인트를 다루는 라이브러리 python-pptx의 개발자인 Scanny가 직접 답변을 달았다. 이걸 읽고 참고했다.

파이썬 코드 예제

참고로 python-pptx에서는 차트를 크게 두 종류(?)로 구분한다. 카테고리 차트와 XY차트. (차트에 데이터를 넣을 때 항목과 계열이 구분되는 막대, 방사형 등 대부분의 차트가 카테고리 차트에 해당한다. 반면 Scatter Plot 같은 분산형 차트는 XY 차트에 해당한다.)

그래서 각각에 해당하는 함수를 작성해서 적용해봤다.

from pptx import Presentation
from pptx.chart.data import CategoryChartData, XyChartData


# 카테고리차트 업데이트
def update_cat_chart(chart, categories=list, data=list):
    chart_data = CategoryChartData()
    chart_data.categories = categories
    for datum in data:
        chart_data.add_series(datum[0], datum[1])
    chart.replace_data(chart_data)

# XY차트 업데이트
def update_xy_chart(chart, x_values=list, y_values=list):
    chart_data = XyChartData()
    series = chart_data.add_series("계열 1")
    for x, y in zip(x_values, y_values):
        series.add_data_point(x, y)
    chart.replace_data(chart_data)


# PPT 템플릿 불러와서
prs = Presentation("./template.pptx")


# PPT 파일 안에 있는 차트를 검색해 리스트에 넣어놓고
chart_list = []
for slide in prs.slides:
    for shape in slide.shapes:
        chart_list.append(shape.chart)        


# 0번 차트 업데이트
update_cat_chart(
    chart=chart_list[0],
    categories=["항목 1","항목 2","항목 3"],
    data=[["계열 1", (100,200,250)], ["계열 2", (140,50,60)]]
    )

# 1번 차트 업데이트
update_xy_chart(
    chart=chart_list[1], 
    x_values=[1,2,3],
    y_values=[1,2,3]
    )


# 저장
prs.save("./output.pptx")

일단 파워포인트 템플릿 파일에 기본 차트를 잘 그려놓으면, 새로운 데이터로 차트 수백 장 그리는 것도 문제 없다.

댓글 남기기

추천 글