IT/DEV Study

[Python] Excel 파일 데이터 (이름, 날짜 등) 읽어서 상장 PPT 슬라이드 자동 채우기 (python-pptx, openpyxl, pandas)

Ella.J 2024. 12. 10. 16:22
728x90
반응형

 

간만에 우리 윰교수님 부탁으로 파이썬을 해봤어요🤣

학생들 상장을 만들어야 하는데 학생리스트는 엑셀로 있고 상장템플릿은 PPT로 되어 있다면서,

학생 수가 몇백 명이 넘는데 어떻게 하는지 아냐고 물어봐가지고,

제가 아는 자동화방법으로 해봤습니다 ^^

엑셀 매크로도 물론 조금은 알지만, PPT에도 매크로 같이 자동 채우기가 되나요...?

아시는 분....??😅

 

아무튼,,ㅎㅎ

파이썬을 이용해서 Excel을 읽고, PPT에 적용해 보겠습니다.

 

VSCode에서 Python 사용하는 방법은 아래 링크 참고해 주세요 : )

 

[Python] 파이썬 다운로드 VSCode 파이썬 실행환경 만들기 (2024.12)

📌 파이썬 다운로드 ** 다운로드 링크 ** Download PythonThe official home of the Python Programming Languagewww.python.org 환경변수 등록을 자동으로 해줬기 때문에 재부팅 해준다. 환경변수는 [시스템 환경 변

ella-devblog.tistory.com

 


 

필요한 파이썬 패키지는 다음과 같습니다.

> pip install python-pptx

 

> pip install openpyxl

 

> pip install pandas

 


 

그리고 상장 템플릿과 엑셀 파일이 필요합니다.

제가 만든 파일을 첨부합니다.

 

상장.pptx
0.69MB
수상자리스트.xlsx
0.01MB

 

 

 

상장 템플릿 파일은 이렇게 생성했습니다.

 

PPT에서 이름과 날짜 등 엑셀파일에서 데이터 가져올 부분을 남기고 (빨간 부분 제외)

슬라이드 마스터로 옮겨줍니다.

 

슬라이드 마스터에 기존에 있던 제목, 내용 편집 텍스트 박스들은 삭제하고 템플릿을 복사합니다.

그리고 템플릿은 첫 번째 (slide_layouts[0])에다가 만들어줍니다.

 

그럼 이렇게 공통으로 들어가는 부분은 제외하고,

이름과 날짜 등 변경이 필요한 텍스트 도형만 남습니다.

 

수상자 리스트 엑셀파일은 다음과 같이 만들어 줬습니다.

이름과 날짜로 열을 구분하여 가져올 수 있습니다.

 

 

 


 

같은 폴더 내에 상장.pptx 파일과 수상자리스트.xlsx 파일을 같이 넣고,

파이썬 파일을 만들어 아래와 같이 파이썬 파일을 작성합니다.

ppt_excel.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from pptx import Presentation
import pandas as pd
import copy
 
#PPT 읽기 (같은 폴더 위치)
ppt = Presentation('상장.pptx')
#PPT 첫 번째 슬라이드 가져오기
slide = ppt.slides[0]
#엑셀 파일 데이터 읽기
data = pd.read_excel("수상자리스트.xlsx")
 
#PPT 슬라이드 안에서 해당 text가 있는지 찾기
def find_text_shape(slide, text):
    for x in slide.shapes:
        if x.has_text_frame and x.text == text:
            return x
    
#PPT 슬라이드 복사하기
def copy_slide(p, i):
    template = p.slides[i]
    #슬라이드 마스터 내의 템플릿 슬라이드 번호 : 0
    default_slide = p.slide_layouts[0]
    copied_slide = p.slides.add_slide(default_slide)
    
    #기존 템플릿 슬라이드에서 모든 도형 복사하기
    for shape in template.shapes:
        elem = shape.element
        new_elem = copy.deepcopy(elem)
        copied_slide.shapes._spTree.insert_element_before(new_elem, 'p:extLst')
    return copied_slide
 
#엑셀 파일의 데이터 수 만큼 슬라이드 복사 + 이름, 날짜 넣기
for i, r in data.iterrows():
    copied_slide = copy_slide(ppt, 0)
    
    num = find_text_shape(copied_slide, '이름').text_frame
    p = num.paragraphs[0#첫번째 문단
    run = p.runs[0#첫번째 글자
    run.text = r['이름'#엑셀 데이터의 이름 넣기
    
    name_school = find_text_shape(copied_slide, '날짜').text_frame
    p = name_school.paragraphs[0]
    run = p.runs[0]
    #엑셀 데이터의 날짜는 숫자 형식  => 날짜 형식으로 변경하기
    date = pd.to_timedelta(r['날짜'], unit='D'+ pd.to_datetime('1899-12-30')
    run.text = date.strftime('%Y년 %m월 %d일')
 
#상장 복사본으로 저장하기
ppt.save('상장_복사본.pptx')
cs

 

엑셀 날짜 형식 읽어오기
date = pd.to_timedelta(r['날짜'], unit='D') + pd.to_datetime('1899-12-30')

날짜 포맷 지정하기
date.strftime('%Y년 %m월 %d일')

 

파이썬 파일을 작성하고 실행하면 아래와 같이 복사본이 생성됩니다.

 

맨 처음 슬라이드는 복사하기 위한 슬라이드이기 때문에

두 번째 슬라이드부터 엑셀에 있는 데이터가 적용된 것을 확인할 수 있습니다.

 

 

PPT랑 Excel을 이렇게 편하게 할 수 있다니!

다들 Python으로 광명 찾으세요🤣🤣

 

 


아래 블로그를 참고하여 아주 간단하게 만들어 본 코드입니다 👍

 

파이썬으로 PPT 노가다 자동화 하기

대부분의 HR 시스템에서 인사 프로필 출력기능을 제공하지만, 인사담당자로 일하다 보면 직원들의 프로필을 PPT로 직접 만들어야 할 때가 자주 있습니다. 승진 심사, 해외 주재원 선발, 임원 평가

jgws.tistory.com


 

728x90
반응형