Guidelines

엑셀 데이터를 기반으로 수료증 슬라이드 생성하기

이번 수업에서는 수료증 파워포인트 템플릿(.pptx)과 학생 정보를 담은 엑셀(.xlsx) 파일을 읽고, 엑셀에서 가져온 데이터를 반영한 새로운 파워포인트 슬라이드를 생성해 보겠습니다.

참고 : 컴퓨터에서 실습으로 제공된 파이썬 프로그램을 직접 실행할 경우, 템플릿 PPT(input_file.pptx)와 학생 정보(input_file.xlsx) 파일이 파이썬 프로그램과 동일한 폴더 내 있어야 합니다.


1. 필수 라이브러리 임포트

라이브러리 불러오기
import openpyxl from pptx import Presentation from io import BytesIO from pptx.enum.shapes import MSO_SHAPE_TYPE
  • openpyxl : 엑셀 파일을 읽고 수정하는 파이썬 라이브러리입니다.

  • pptx : 파워포인트 파일을 생성, 수정할 수 있는 라이브러리입니다.

  • io.BytesIO : 컴퓨터의 저장 공간인 메모리 내에 바이트 데이터(0과 1로 이루어진 데이터)를 저장하고, 이를 파일처럼 사용할 수 있게 해주는 클래스입니다.

  • pptx.enum.shapes.MSO_SHAPE_TYPE : 파워포인트에서 다양한 도형의 타입을 정의하는 상수입니다. 도형, 이미지, 텍스트 박스 등의 타입을 구분할 때 사용됩니다.


2. 파워포인트 파일 및 엑셀 파일 로드

pptx, xlsx 파일 불러오기
presentation = Presentation("input_file.pptx") wb = openpyxl.load_workbook("input_file.xlsx") sheet = wb.active
  • Presentation("input_file.pptx") : 파워포인트 파일을 불러옵니다.

  • openpyxl.load_workbook("input_file.xlsx") : 엑셀 파일을 불러옵니다.

  • wb.active : 엑셀 파일의 첫 번째 시트를 선택합니다.


3. 엑셀 데이터 읽기

data_sets 리스트 생성
data_sets = [] for row in sheet.iter_rows(min_row=2, values_only=True): data = { "AWARD_NAME": row[0], "NAME": row[1], "CONTENT": row[2], "DATE": row[3], "ORGANIZATION": row[4], } data_sets.append(data)
  • sheet.iter_rows() : 엑셀 시트의 각 행을 반복해서 읽어옵니다. 여기서는 2번째 행(min_row=2)부터 읽습니다.

  • values_only=True : 셀의 값을 직접 가져옵니다.

  • data_sets.append(data) : 각 행의 데이터를 data라는 딕셔너리로 저장하고, 리스트에 추가합니다.


4. 슬라이드 템플릿 선택

템플릿 슬라이드 선택
template_slide = presentation.slides[0]
  • presentation.slides[0] : 파워포인트의 첫 번째 슬라이드를 템플릿으로 선택합니다. 이 슬라이드를 바탕으로 새 슬라이드를 생성합니다.

5. 슬라이드 복사 및 이미지, 텍스트 처리

슬라이드 요소 복사
for data in data_sets: # 템플릿 슬라이드를 복사하여 새로운 슬라이드 생성 new_slide = presentation.slides.add_slide(template_slide.slide_layout) for shape in template_slide.shapes: # 그룹 도형 처리 if shape.shape_type == MSO_SHAPE_TYPE.GROUP: for sub_shape in shape.shapes: if sub_shape.shape_type == MSO_SHAPE_TYPE.PICTURE: # ...중략... # 이미지 도형 처리 elif shape.shape_type == MSO_SHAPE_TYPE.PICTURE: image_stream = shape.image.blob # ...중략... # 텍스트 도형 처리 elif shape.has_text_frame: new_shape = new_slide.shapes.add_textbox(shape.left, shape.top, shape.width, shape.height) new_shape.text_frame.clear() # 텍스트 복사 for paragraph in shape.text_frame.paragraphs: new_paragraph = new_shape.text_frame.add_paragraph() # ...중략...
  • presentation.slides.add_slide() : 템플릿 슬라이드를 사용해 새로운 슬라이드를 추가합니다.

  • shape.shape_type == MSO_SHAPE_TYPE.GROUP : 그룹으로 묶여 있는 도형을 처리할 때 그룹 내부의 도형들을 따로 처리합니다.

  • shape.shape_type == MSO_SHAPE_TYPE.PICTURE : 이미지 도형을 처리할 때 이미지를 새 슬라이드에 복사합니다.

  • shape.has_text_frame : 텍스트가 있는 도형을 복사할 때, 텍스트 박스를 새로 만들어서 그 안의 텍스트를 복사합니다. 텍스트의 크기, 굵기, 기울임도 유지합니다.


6. 엑셀 데이터로 텍스트 대체

텍스트 데이터로 대체
for shape in new_slide.shapes: if shape.has_text_frame: for paragraph in shape.text_frame.paragraphs: if "<AWARD_NAME>" in paragraph.text: paragraph.text = data["AWARD_NAME"] elif "<NAME>" in paragraph.text: paragraph.text = data["NAME"] elif "<CONTENT>" in paragraph.text: paragraph.text = data["CONTENT"] elif "<DATE>" in paragraph.text: paragraph.text = data["DATE"] elif "<ORGANIZATION>" in paragraph.text: paragraph.text = data["ORGANIZATION"]
  • 엑셀 데이터(data)를 파워포인트 슬라이드에 있는 특정 텍스트와 교체합니다. 예를 들어, <AWARD_NAME>라는 텍스트는 엑셀에서 읽은 AWARD_NAME 데이터로 대체됩니다.

7. 템플릿 슬라이드 제거 및 결과 저장

템플릿 슬라이드 제거 및 저장
presentation.slides._sldIdLst.remove(presentation.slides._sldIdLst[0]) presentation.save("output_file.pptx")
  • _sldIdLst.remove() : 처음 사용한 템플릿 슬라이드를 삭제합니다. 이 코드는 파워포인트 슬라이드 목록에서 첫 번째 슬라이드를 제거하는 비공식적인 방법입니다.

  • presentation.save() : 최종 결과를 output_file.pptx 파일로 저장합니다.


전체적인 흐름 요약

  1. 엑셀에서 데이터를 읽어옵니다.

  2. 첫 번째 슬라이드를 템플릿으로 사용하여 엑셀의 각 데이터를 새로운 슬라이드에 삽입합니다.

  3. 텍스트와 이미지를 템플릿과 동일하게 복사하면서, 텍스트 내용은 엑셀 데이터로 대체합니다.

  4. 템플릿 슬라이드를 삭제하고, 최종 결과를 파일로 저장합니다.

Mission
0 / 1

Run the code and check the results.

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help

Code Editor

Run
Generate

Execution Result

Input/Result

The document is empty.

Try running the code.