매주 혹은 매달 돌아오는 주간 보고, 실적 발표 시즌이 되면 직장인들은 새로운 내용보다 파워포인트(PPT) 슬라이드의 뼈대를 만들고, 제목을 적고, 서식을 맞추는 단순 반복 작업에 많은 시간을 허비하곤 합니다. 늘 똑같은 레이아웃에 텍스트와 숫자만 바뀌는 형태의 보고서라면, 굳이 파워포인트를 켜서 수작업으로 슬라이드를 장장 구성할 필요가 없습니다. 파이썬의 python-pptx 라이브러리를 활용하면, 내가 지정한 텍스트 데이터나 정형화된 서식을 바탕으로 수십 장의 PPT 보고서 뼈대를 단 몇 초 만에 자동으로 생성할 수 있습니다.
반복적인 포맷의 주간 보고서 PPT 작성 시간 단축하기
python-pptx 패키지 활용 가이드
파이썬으로 파워포인트 파일(.pptx)을 생성, 수정, 제어할 때 표준처럼 사용되는 강력한 라이브러리가 바로 python-pptx입니다. 이 패키지를 사용하면 마우스 매크로처럼 화면을 조작하는 것이 아니라, 코드 내부에서 슬라이드를 추가하고, 텍스트 박스를 배치하며, 글자 크기와 색상 같은 스타일(정렬, 폰트)을 정밀하게 제어할 수 있습니다. 템플릿 파일을 불러와 특정 내용만 치환하는 방식도 가능하여 실무 활용도가 매우 높습니다. 자동화 스크립트 작성을 시작하기 전, 컴퓨터 터미널에서 아래 명령어로 라이브러리를 먼저 설치해 줍니다.
Bash
pip install python-pptx
텍스트와 슬라이드를 자동으로 추가하는 기본 자동화 코드
핵심 스크립트 구현 및 적용 방법
원하는 슬라이드 제목과 본문 내용을 파이썬 리스트(배열) 형태로 정의하면, 이를 바탕으로 다중 페이지의 깔끔한 PPT 보고서 초안을 순식간에 빌드해 주는 전체 파이썬 스크립트 코드입니다.
Python
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
def create_report_pptx(output_file_name, report_data):
# 새로운 파워포인트 프레젠테이션 객체 생성
prs = Presentation()
# 16:9 와이드스크린 해상도 설정 (실무 표준 규격)
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
# 레이아웃 정의 (0: 제목 슬라이드, 1: 제목 및 내용 슬라이드, 6: 빈 슬라이드)
blank_slide_layout = prs.slide_layouts[6]
print("PPT 보고서 뼈대 생성을 시작합니다.")
for idx, data in enumerate(report_data):
# 1. 빈 슬라이드 추가 (자유로운 배치를 위해 빈 레이아웃 사용)
slide = prs.slides.add_slide(blank_slide_layout)
# 2. 상단 슬라이드 제목(Title) 박스 생성 및 서식 설정
title_box = slide.shapes.add_textbox(Inches(0.5), Inches(0.5), Inches(12.333), Inches(1.0))
tf_title = title_box.text_frame
tf_title.word_wrap = True
p_title = tf_title.paragraphs[0]
p_title.text = data["title"]
p_title.font.name = "Arial"
p_title.font.size = Pt(28)
p_title.font.bold = True
p_title.font.color.rgb = RGBColor(0, 51, 102) # 신뢰감을 주는 네이비 색상
# 3. 중앙 본문(Body) 텍스트 박스 생성 및 서식 설정
body_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.8), Inches(12.333), Inches(5.0))
tf_body = body_box.text_frame
tf_body.word_wrap = True
for bullet_point in data["bullets"]:
p_body = tf_body.add_paragraph()
p_body.text = f"• {bullet_point}"
p_body.font.name = "Arial"
p_body.font.size = Pt(18)
p_body.font.color.rgb = RGBColor(32, 32, 32)
# 단락 간 간격 설정으로 가독성 확보
p_body.space_after = Pt(12)
print(f"슬라이드 생성 완료 ({idx+1}/{len(report_data)}): {data['title']}")
# 최종 결과물 저장
prs.save(output_file_name)
print(f"\nPPT 보고서 자동 생성이 완료되었습니다: {output_file_name}")
# 보고서에 들어갈 목차 및 본문 데이터 정의 (실무 연동 시 데이터베이스나 엑셀에서 추출 가능)
slides_content = [
{
"title": "1. 전분기 주요 사업 추진 성과",
"bullets": [
"파이썬 기반 업무 자동화 시스템 도입을 통한 단순 반복 업무 40% 감축",
"고객 맞춤형 코딩 교육 컨텐츠 라인업 다변화 및 시장 점유율 확대",
"온라인 비즈니스 거점 다각화를 통한 신규 유입 회원수 증가"
]
},
{
"title": "2. 핵심 업무 프로세스 개선 현황",
"bullets": [
"대용량 문서 변환 및 취합 파이프라인 구축 완료 (HWP to Word / Excel 병합)",
"스마트 알림 봇 연동을 통한 실시간 시스템 장애 대응 모니터링 체계 확립",
"수작업 문서 보완 프로세스를 완전 무인 스케줄러 기반 자동화로 전환"
]
},
{
"title": "3. 차기 분기 중점 추진 전략",
"bullets": [
"인공지능(AI) 툴 연동형 신규 웹 프레임워크 프로토타입 론칭 계획",
"초등 저학년 맞춤형 피지컬 컴퓨팅 교구재 공급망 안정화",
"업무 생산성 향상을 위한 전사적 IT 자동화 솔루션 내재화 및 교육 실시"
]
}
]
if __name__ == "__main__":
result_ppt = "자동생성_주간보고서_뼈대.pptx"
create_report_pptx(result_ppt, slides_content)
이 코드는 실무에서 장표 배치가 가장 자유로운 빈 슬라이드 레이아웃(slide_layouts[6])을 기반으로 구동되며, 와이드스크린(16:9) 규격을 내부 수치(Inches)로 정확하게 매핑하여 장표가 찌그러지는 현상을 방지합니다. 텍스트 프레임의 자동 줄바꿈(word_wrap = True) 설정과 단락 간 격차 조정을 통해 텍스트가 겹치지 않는 가독성 높은 슬라이드 뼈대를 완성합니다. 코드 하단의 데이터 구조에 제목과 내용만 채워 넣거나, 추후 엑셀 및 데이터베이스 데이터를 이 함수와 루프로 연동하면 수백 장의 정기 보고서 초안을 클릭 한 번으로 완벽하게 빌드할 수 있습니다.