프로그래밍 언어/python

[win32com] 파이썬으로 pptx 파일 다루기 (1) pptx의 원하는 위치에 접근하기

이현찬 2022. 10. 10. 18:00
728x90

win32com은 Microsoft Windows OS가 제공하는 API이다. 이를 사용해 MS word, Power Point, Excel, Outlook 등 microsoft office의 제품들 다룰 수 있다. excel, ppt 파일을 더 쉽게 다룰 수 있도록 만들어진 여러 라이브러리들이 있지만, 환경에 따라 사용할 수 없는 라이브러리들이 있는 것 같다. python-pptx를 이용해 사내에서 업무 자동화 프로그램을 개발하려고 했으나 저장되어있는 pptx 파일을 불러오지 못하는 오류가 있어 win32com를 사용하게 되었다.

PPT에 있는 데이터에 접근하기

지금까지 필요한 기능들은 pptx 파일에 저장된 데이터를 읽어 활용하는 것이라 원하는 데이터를 어떻게 받아올 수 있을지에 대한 고민을 정리한다. excel은 table 형태로 정형화 되어 있기 때문에 행과 열의 정보로 원하는 데이터에 접근할 수 있지만 ppt는 데이터를 슬라이드 영역 내에 자유롭게 배치할 수 있고 text box, table, 이미지, 도형 등 여러 가지 객체가 존재한다. 이 때문에 원하는 데이터에 접근하는 것 부터 어려움이 있었다.

PPT 파일의 구조

  • pptx 파일은 하나의 presentation안에 여러 개의 slide를 가지고 있다. 그리고 각 slide에 존재하는 text box, 이미지, table 등의 객체는 shape이라고 부른다.
  • pptx 파일에서 어떤 작업을 수행하고자 할 때는 1) pptx 파일 열기 2) target slide에 접근 3) target shape에 접근 순으로 진행한다.
  • 이 때, 1) 원하는 파일에 접근은 파일명으로 접근할 수 있고, 2) target slide는 slide 번호로 접근할 수 있지만 3) target shape에 접근하는 것이 문제이다. 각각의 shape마다 데이터에 접근하는 과정이 다르기 때문에 target shape의 종류를 아는 것까지 필요하다.

예제 코드

  • slide 마다 무질서하게 존재하는 것 처럼 보이는 shape이지만, 생성될 때 일정한 규칙에 의해 정의되는 Name attribute를 가지고 있다.
  • Name은 shape의 종류 + 생성된 순서로 구성되어 python 스크립트에서 접근한 shape의 종류를 확인할 수 있다. 만약 동일한 template를 만들어 활용한다면 template 내의 각 shape에 접근할 수 있는 이름을 부여해 쉽게 접근할 수 있도록 할 수 있다.
  • 아래 예시는 pptx 파일을 열어 프리젠테이션 내에 존재하는 모든 shape의 정보를 출력하는 예시이다.

(A) 대상 pptx 파일 contents, (B) 예시 코드 실행 결과