
🔧 문제 상황
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 |
|---|