간만에 우리 윰교수님 부탁으로 파이썬을 해봤어요🤣
학생들 상장을 만들어야 하는데 학생리스트는 엑셀로 있고 상장템플릿은 PPT로 되어 있다면서,
학생 수가 몇백 명이 넘는데 어떻게 하는지 아냐고 물어봐가지고,
제가 아는 자동화방법으로 해봤습니다 ^^
엑셀 매크로도 물론 조금은 알지만, PPT에도 매크로 같이 자동 채우기가 되나요...?
아시는 분....??😅
아무튼,,ㅎㅎ
파이썬을 이용해서 Excel을 읽고, PPT에 적용해 보겠습니다.
VSCode에서 Python 사용하는 방법은 아래 링크 참고해 주세요 : )
필요한 파이썬 패키지는 다음과 같습니다.
> pip install python-pptx
> pip install openpyxl
> pip install pandas
그리고 상장 템플릿과 엑셀 파일이 필요합니다.
제가 만든 파일을 첨부합니다.
상장 템플릿 파일은 이렇게 생성했습니다.
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으로 광명 찾으세요🤣🤣
아래 블로그를 참고하여 아주 간단하게 만들어 본 코드입니다 👍
'IT > DEV Study' 카테고리의 다른 글
[Python] 파이썬 다운로드 VSCode 파이썬 실행환경 만들기 (2024.12) (0) | 2024.12.10 |
---|---|
VSCode에서 git 사용하기. GitHub 연동하기. (Windows 환경) (0) | 2024.11.20 |
[Flutter] VSCode Settings : 플러터 개발을 편하게 하기위한 VSCode 환경설정 (3) | 2024.11.16 |
[Flutter] VSCode Developer Tools : Widget Inspector (3) | 2024.11.15 |
[Flutter] VSCode 플러터 앱 바로 만들고 실행하기 (0) | 2024.11.13 |