엑셀 pdf 변환/저장 (파이썬으로 자동화)

회사에서 일하면서 엑셀에서 차트를 하나씩 그리고(일종의 대시보드를 만들어서) 이걸 일일이 pdf로 저장할 때가 있었다. 이걸 언제 손으로 해. 그래서 이번에도 역시 파이썬을 이용해서 자동화 해보았다. 그리고 코드 짜놓은 게 아까워서 간략히 기록차 남겨 놓는다.

아, 윈도우 기준!


준비

우선 pywin32라는 파이썬 패키지를 설치해야 한다. 이건 윈도우에서 돌아가는 애플리케이션(프로그램)들을 파이썬이 제어할 수 있도록 구현해놓은 거라 생각하면 편하다. 어려우니 너무 깊게 가진 말자. 나도 잘 모른다.

이걸 pip에 인스톨 하려면 pip install pywin32, 아나콘다 통해서 conda 인스톨 하려면 conda install -c anaconda pywin32 와 같이 적어주면 된다. 자세한 내용은 아래 홈페이지 참고.

준비 끝.

기본 사용법 익히기

pywin32 패키지는 용례가 끝이 없기 때문에 (이걸로 뭐 윈도우 상에서 엑셀 뿐만 아니라 워드나 파워포인트도 다룰 수 있고, 익스플로러 같은 브라우저도 다룰 수 있으므로) 애초에 하기로 한 엑셀 시트 pdf 저장 기능만 익혀보자.

예를 들어 바탕화면에 있는 ex.xlsx라는 엑셀 파일에 각각 data, chart라는 이름을 가진 시트 2개가 있을 때 chart 시트를 선택하고 pdf로 저장하는 작업을 코드로 짜본다면 이렇게 된다.

# 패키지 불러오기
import win32com.client

# 엑셀 애플리케이션 준비
excel = win32com.client.Dispatch("Excel.Application")

# 윈도우 화면에 띄울지, 아니면 백그라운드에서 돌릴지 선택
# 테스트를 위해 True로 해서 직접 엑셀이 돌아가는 걸 눈으로 확인하자
excel.Visible = True

# 엑셀파일(워크북) 열기
# 절대경로 입력!
wb = excel.Workbooks.Open("C:\\Users\\사용자명\\desktop\\ex.xlsx")

# 각 시트를 변수에 할당
ws_data = wb.Worksheets("data")
ws_chart = wb.Worksheets("chart")

# chart 시트 선택
ws_chart.Select()

# pdf 저장경로, 파일명
pdf_path = "C:\\Users\\사용자명\\desktop\\ex.pdf"

# pdf 저장
wb.ActiveSheet.ExportAsFixedFormat(0, pdf_path)

# 워크북 종료 (저장하려면 True)
wb.Close(False)

# 엑셀 애플리케이션 종료
excel.Quit()

스크립트 다 짜놓고 실행하는 것보다는 주피터 노트북 같은 걸로 한 스텝씩 실행해보면서 실제로 이게 잘 동작하는지 보면 한 눈에 이해가 간다. 신기함!

참고로 pdf 저장하기 전에는 엑셀의 [보기] 탭에서 [페이지 나누기 미리보기]를 눌러 pdf로 저장될 영역이 어딘지 미리 확인하고, 원하는 범위로 조정을 해주는 게 좋다.


반복문을 활용해 수많은 pdf 파일 생성하기

예를 들어 아래와 같이 data 시트에는 각 사람들의 데이터가 들어 있고,

chart 시트에서는 한 명씩 데이터를 불러와 차트로 그려 저장한다고 해보자.

2행1열(A2셀)에 번호만 입력해주면 오른 쪽 값들은 vlookup 함수를 사용해서 자동으로 불러오도록 미리 엑셀을 짜놓았다. 아무튼.

이걸 반복문을 돌면서 하려면 아래와 같이 코드를 짜면 되겠다.

import win32com.client
import time

excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True

wb = excel.Workbooks.Open("C:\\Users\\사용자명\\desktop\\ex.xlsx")
ws_data = wb.Worksheets("data")
ws_chart = wb.Worksheets("chart")

# chart 시트 선택
ws_chart.Select()
time.sleep(0.5)

# 1~4 출력번호 반복문
for n in range(1,5):

    # 출력 번호 2행1열에 입력
    ws_chart.Cells(2, 1).Value = n

    # 2행2열 값을 name 변수에 저장
    name = ws_chart.Cells(2, 2).Value

    # pdf 저장경로, 파일명
    pdf_path = "C:\\Users\\사용자명\\desktop\\{}{}.pdf".format(str(n), name)

    # pdf 저장
    wb.ActiveSheet.ExportAsFixedFormat(0, pdf_path)
    time.sleep(1)

wb.Close(False)
excel.Quit()

해당 경로(여기서는 바탕화면)에 1배트맨.pdf 부터 4아이언맨.pdf까지 네 개의 pdf 파일이 잘 저장되면 성공!

역시 파이썬이 최고야.

추천 글

댓글 남기기