저는 두 개의 (나름) 대형 동아리를 운영하는 회장입니다 ㅎㅎ 운영진에게는 매 기수 재밌는 활동들뿐만 아니라 자잘한 서류 작업들이 참 많습니다. ^^;;
수료증을 만들거나 명단을 관리하는 일은 필수적이지만, 그만큼 반복적인 작업에서 실수가 일어나기 쉽습니다. 작성할 때마다 이름이나 학과, 숫자 등이 잘못 입력되는 경우가 많았습니다. 하나씩 수작업으로 처리하다 보니 반복적인 실수나 시간 낭비가 발생했고, 이는 효율적인 운영에 큰 걸림돌이 되었습니다. 이러한 문제를 해결하기 위해, 자동화된 방법으로 수료증을 생성하는 방법을 고민하게 되었고 파이썬을 활용한 자동화하는 법을 쓰고 있는데 공유해보려고 합니다!
엑셀 데이터에서 이름, 학과, 숫자 정보를 자동으로 PPT에 삽입하여 수료증을 자동으로 생성하는 방법을 설명합니다. 파이썬 코드와 구체적인 파일 준비 방법을 소개하며, 여러분의 작업 흐름을 자동화할 수 있는 방법을 제공합니다.
코랩 사용이 처음이라면!
구글 로그인을 한다. >> 파란색 "새 노트" 클릭
https://colab.google.com/
엑셀 파일: 이름, 학과, 숫자 등의 정보를 포함하는 엑셀 파일.
contents.xlsxPPT 템플릿 파일: 수료증 템플릿이 포함된 PPT 파일. 수료증의 각 위치에 (숫자), (이름), (학교) 등의 텍스트를 포함시켜두세요.
before.pptx
편하게 작업하려면 Canva 같은 툴로 수료증 디자인 저장 + 변동되는 텍스트만 위치에 맞추어 텍스트박스 추가하면 된다!
작업을 위해 필요한 파이썬 라이브러리입니다. 코랩에서 아래와 같이 설치하고 사용합니다.
!pip install python-pptx pandas
코랩이 처음인 당신.. 위에 저거 글씨 복사하고 붙여놓고 왼쪽 실행버튼 누르면 된다.
엑셀 파일에서 데이터를 읽어옵니다.
import pandas as pd
# 엑셀 데이터 불러오기
data = pd.read_excel('/content/contents.xlsx')
PPT 템플릿 파일을 불러옵니다.
from pptx import Presentation
# PPT 템플릿 불러오기
template = Presentation('/content/before.pptx')
기존 슬라이드를 복제하는 함수입니다.
def duplicate_slide(pres, slide_index):
slide = pres.slides[slide_index]
slide_layout = slide.slide_layout
copied_slide = pres.slides.add_slide(slide_layout)
for shape in slide.shapes:
if shape.has_text_frame:
new_shape = copied_slide.shapes.add_textbox(
left=shape.left, top=shape.top, width=shape.width, height=shape.height
)
new_shape.text = shape.text
return copied_slide
텍스트 상자의 글꼴, 크기, 정렬 등을 설정하는 함수입니다.
from pptx.enum.text import PP_ALIGN
from pptx.util import Pt
def set_text_format(text_frame, font_name, font_size, alignment=None):
p = text_frame.paragraphs[0]
p.font.name = font_name
p.font.size = font_size
if alignment:
p.alignment = alignment
엑셀 데이터를 PPT 템플릿에 삽입하고, 텍스트를 원하는 내용으로 교체하는 부분입니다.
# 슬라이드 복제 및 데이터 삽입
for index, row in data.iterrows():
slide = duplicate_slide(template, 0) # 0번째 슬라이드 복사
# 텍스트 상자 확인 및 대체
for shape in slide.shapes:
if shape.has_text_frame:
text_frame = shape.text_frame
if "(숫자)" in shape.text:
formatted_number = f"{int(row['(숫자)']):03}" # 3자리로 패딩
shape.text = shape.text.replace("(숫자)", formatted_number)
set_text_format(text_frame, font_name="궁서", font_size=Pt(15))
if "(이름)" in shape.text:
shape.text = shape.text.replace("(이름)", row['(이름)'])
set_text_format(text_frame, font_name="궁서", font_size=Pt(10.5), alignment=PP_ALIGN.RIGHT)
if "(학교)" in shape.text:
shape.text = shape.text.replace("(학교)", row['(학교)'])
set_text_format(text_frame, font_name="궁서", font_size=Pt(10.5), alignment=PP_ALIGN.RIGHT)
수정된 PPT 파일을 저장하는 부분입니다.
# 결과물 저장
template.save("/content/output_combined.pptx")
(숫자), (이름), (학교) 등 자리 표시자를 넣습니다.제 벨로그로 설명이 부족하시다면,,
이 작업 흐름을 베껴가셔서 GPT한테 물어보면서 어디가 안된다!
(에러 메세지를 복사 붙여넣기하고) 너가 고쳐봐라 어디가 문제냐 내가 뭘 처리해줄까?
이것도 되냐!! 다 물어보면 된답니다 하하.
set_text_format 함수를 사용하세요.