Automotive/Automation

Python으로 PPT 작업 자동화 하기 2

코딩쪼앙 2025. 6. 25. 13:21

 

🔧 문제 상황

1탄에서 파이썬을 활용해 테스트 리포트 자동화를 구현하면서, 이미지를 슬라이드 맨 뒤로 보내는 과정에서 PPT 파일이 손상되는 문제가 발생했다. 이는 python-pptx의 내부 XML 구조를 직접 조작했기 때문으로 보이며, 결과적으로 복구는 가능했지만 자동화의 의미를 퇴색시키는 수작업이 필요했다.
이에 따라, PowerPoint의 공식 COM 인터페이스를 활용한 매크로 방식으로 문제를 해결했다.

📌 이전 글 참고

 

Python으로 PPT 작업 자동화 하기 1

🔧 문제 상황 테스팅을 수행하다보면 수 많은 테스트케이스를 기록하고 업로드 하는 것은 필수적이다.현재 안전에 직결되는 유닛의 테스트를 수행하다보니 테스트케이스가 1,000개 가까이 될

iilovecode.tistory.com


🧠 COM (Component Object Model)  객체란?

마이크로소프트가 만든 기술로, Windows 프로그램끼리 서로 기능을 호출하고 제어할 수 있게 해주는 인터페이스

-> Python에서 원하느 작업을 수행하기 위해 COM 객체 생성 필요


✅ 기대 동작

  • 지정한 폴더 내의 모든 .pptx 파일을 열고
  • 각 슬라이드의 모든 이미지를 찾아
  • Z-Order를 맨 뒤로 이동
  • 저장 후 닫기

⚙️ 동작 과정

1. PowerPoint COM 객체 생성

ppt_app = win32com.client.Dispatch("PowerPoint.Application")
    ppt_app.Visible = True
  • PowerPoint를 백그라운드에서 실행
  • Visible 설정을 True로 두어 파워포인트가 실행되고 있는지 확인 -> 확인하지 않아도 괜찮다면 Visible을 False로 둘 수 있다.

2. 폴더 내 모든 PPT 파일 순회

   for file in os.listdir(folder_path):
        if file.endswith(".pptx"):
            full_path = os.path.join(folder_path, file)
            presentation = ppt_app.Presentations.Open(full_path, WithWindow=False)

 

  • 지정된 폴더 내 .pptx 파일만 필터링
  • 각 파일을 열고 슬라이드 순회
  • 위에서 Visible 설정을 True로 두어 작업 진행 사항을 확인할 수 있으므로 모든 ppt를 순회하며 여는 WithWindow 설정은 False로 두고 창 없이 백그라운드에서 열도록 구성했다 -> 각 프레젠테이션이 화면에 모두 뜨게되면 속도가 저하될 수 있기 때문

3. 이미지 객체 탐색 및 Z-Order 변경

   for slide in presentation.Slides:
                for shape in slide.Shapes:
                    if shape.Type == 13:  # 13 = msoPicture
                        shape.ZOrder(1)  # 1 = msoSendToBack
  • 이미지 객체에 ZOrder(1)설정을 통해 이미지를 맨 뒤로 이동시키기

4. 저장 및 종료

presentation.Save()
presentation.Close()

📌 마무리

이 매크로를 통해 spTree로 이미지를 조작했을 때 발생했던 파일 손상 문제를 완전히 해결할 수 있었고, 1탄에서 구현한 자동화 스크립트와 함께 사용하여 테스트 결과 제출을 위한 수 많은 수동 작업들을 효율적으로 자동화 할 수 있었다.

'Automotive > Automation' 카테고리의 다른 글

Python으로 PPT 작업 자동화 하기 1  (3) 2025.05.19