상세 컨텐츠

본문 제목

[파이썬 업무자동화] 네번째. 파이썬을 이용한 Excel, PPTX 파일 수정,저장하기

파이썬

by 무딩 2025. 6. 2. 14:56

본문

728x90
반응형
SMALL

 엑셀파일, 파워포인트 템플릿 읽기 

기존 Excel파일 및 PPT파일이 만들어져 있는 상황에서 수정이 필요할 때 파이썬으로 파일 읽는 방법

import pandas as pd
from pptx import Presentation

#Excel파일 읽기
file_path = "./profile.xlsx"
df = pd.read_excel(file_path)

#PPT파일 읽기
prs_read = Presentation("./PPT_read.pptx")


source_slid = prs_read.slides[0]

for shape in source_slid.shapes:
    print(shape.name)
    print(shape.shape_type)
    print(shape.text)
    print()

 템플릿 슬라이드 복제 

python-pptx라이브러리는 슬라이드를 통째 복사하는 함수를 기본으로 제공하지 않음.

원본 슬라이드의 shape를 하나씩 복사하여 사용하여야 한다.

이 과정을 pptx내부구조 XML기반으로 코드가 짜져있는걸 복사해서 사용하여야 한다.

XML기반 복사과정 코드


for shape in source_slide.shapes:
        el = shape.element
        newel = copy.deepcopy(el)
        copy_slide.shapes._spTree.insert_element_before(newel,'p:extLst')

    return copy_slide
템플릿 복제 전체 코드


#결과 객체 생성
prs = Presentation()

#슬라이드 크기 설정
prs.slide_width = prs_read.slide_width
prs.slide_height = prs_read.slide_heigh

timport copy

def duplicate_slide(prs, source_slide):    #사용자정의함수로 복제된 슬라이드를 반환하는 함수
    slide_layout = prs.slide_layouts[6]    #빈 레이아웃 생성
    copy_slide = prs.slides.add_slide(slide_layout)    #생성한 빈 레이아웃을 복사하여 또 다른 레이아웃을 생성

#XML기반 복제코드
    for shape in source_slide.shapes:
        el = shape.element
        newel = copy.deepcopy(el)
        copy_slide.shapes._spTree.insert_element_before(newel,'p:extLst')

    return copy_slide

 복제한 슬라이드 엑셀 데이터 삽입 


for idx,row in df.iterrows():    #df의 행 하나씩 접근
    new_slide  = duplicate_slide(prs, prs_read.slides[0])    #새로운 슬라이드 생성

    #추가된 정보들 해당 정보에 맞게 박스 수정   
team_text_frame = new_slide.shapes[1].text_frame
    team_p = team_text_frame.paragraphs[0]
    team_p.text = row["team"] + "/" + row["role"]

    name_text_frame = new_slide.shapes[2].text_frame
    name_p = name_text_frame.paragraphs[0]
    name_p.text = " ".join(row["name"])

prs.save("./output_workshop.pptx")

 


이 글은 제가 공부하면서 개념정리 겸 작성하는 글입니다.

틀린점이 있을 수도 있습니다.

728x90
반응형
LIST

관련글 더보기