SW개발/python

[python] 엑셀 Excel 업무 자동화 프로그램 #1 (openpyxl)

코대장 2020. 9. 4. 22:52
반응형
목표 : python을 통해 excel 다루는 업무 자동화에 대해서 알아보아요.

<시나리오>

타 부서에서 임직원 배포용 인쇄물 표지를 만들어 프린트 하라는 김꼰대 상사 업무지시가 

무려 금요일 퇴근 5분전에 내려왔다. 이런... XXX

표지에는 직원이름인덱스번호(또는 문서번호)가 찍힌 상태로 프린트를 내일 아침까지 해오라는데,

임직원 수가 무려 1000명, 10000명이 넘는다면...?

어떻게 하면 노가다 없이 후다다닥 처리 할 수 있을까?

 

<업무 자동화>

구글에서 머신러닝, 딥러닝을 클라우드 환경에서 돌릴 수 있다는 colab 이라는 서비스를

최근에 알게 되었는데... 에디터도 깔끔하고 별도 설치가 필요없어 파이썬 입문자에겐 접근성은 좋을듯 합니다.

colab.research.google.com/

 

공부도 해볼겸 colab 으로 작성했으니 참고바랍니다.

github.com/mskim8717/python-scripts/blob/master/python_script.ipynb

 

mskim8717/python-scripts

업무를 효율적으로 만들어줄 유용한 파이썬 스크립트 모음집. Contribute to mskim8717/python-scripts development by creating an account on GitHub.

github.com

근데 티스토리나 블로그로 간단하게 퍼올 방법을 모르겠어서 개인용 깃헙에 올려둬요.

 

python에서 excel 다루는 여러가지 라이브러리가 있는데 'openpyxl'을 써서 해결해보아요.


우선 install부터 시작!

pip install openpyxl

openpyxl 모듈 중에서 load_workbook 모듈을 사용한다.

from openpyxl import load_workbook

표지마다 넣을 직원명단 엑셀을 불러온다.

워크북(wb)으로 먼저 불러오고 시트명을 지정해서 워크시트(ws) 변수에 담아준다.

wb = load_workbook('/content/drive/My Drive/tistory/직원명단.xlsx')
ws = wb['Sheet1']

표지 양식인 소스(source.xlsx)를 불러온다. 그리고 표지마다 직원명단과 인덱스번호가 들어간 최종(dest) 파일로 넣어준다.

new_wb = load_workbook('/content/drive/My Drive/tistory/source.xlsx')
dest = new_wb['Sheet1']

자 이제 for loop 수행하면서 

지금은 예제로 10명만 했지만, 100명, 1000명 그 이상

순식간에 표지를 만들어 낸다.

for i in range(2, 12):
  dest['F1'] = ws.cell(i, 1).value
  dest['C23'] = ws.cell(i, 3).value
  new_wb.copy_worksheet(dest)

최종(dest) 파일로 저장되게끔 정리해주면, 오늘 업무 끝.

new_wb.save('/content/drive/My Drive/tistory/dest.xlsx')
new_wb.close()

오늘도 수고하셨습니다.

퇴근합시다.

코드에 사용된 엑셀파일도 첨부로 올려드립니다.

source.xlsx
0.01MB
직원명단.xlsx
0.01MB

 

이상 끝.