본문 바로가기
엑셀 자동화/python+excel 응용

1. DRM때문에 고민이라면 업무자동화 COM으로 시작하세요.

by 회사원코딩 2020. 8. 8.

Fxxxx DRM...

일반 대기업 및 기관에서는 기본적으로 openpyxl, xlrd, pd.read_excel... 등 유용한 파이썬 모듈 대부분이 무용지물입니다. DRM 때문입니다. 보안에 그리도 신경 안 쓰는 우리 회사도 도입하는 시국이면.. 정부, 공공기관 대다수는 DRM보안을 도입했거나 조만간 도입하게 되겠죠. "우리 기관은 기타 보안이 철저해서 DRM 안 해도 된다."는 소신을 입밖으로 꺼낼 용자가 대한민국에 많지 않을 거라고도 확신하고요. 기본적으로 DRM이 적용되면, 해당 확장자를 열 수 있는 프로그램 목록을 서버에서 관리합니다. 예를 들어 ".xlsx" 확장자는 "한셀2018""엑셀2016"으로만 열 수 있다든지 하는 방식이죠. 그 외의 프로그램으로 읽기를 시도하면 Fasoo DRM의 암호화가 풀리지 않아서 파일을 읽을 수가 없습니다.

그런 의미에서 요즘 업무자동화 교재에서 설명하는 대부분의 파이썬 라이브러리들은 안 통하거나 COM을 통해서 우회접근을 하셔야 합니다. (엑셀을 열고 VBA로 직접 다루셔도 되고요.)

우회라고 하면 무슨 해커들 용어 같은데 제가 자주 쓰는 방법 하나를 소개하겠습니다.

 

예를 들어 제가 구축하려는 자동화작업이 아래와 같다고 상상해봅시다.

1. 셀레늄으로 내부망 그룹웨어를 열고 특정공문들에 첨부된 엑셀파일을 원하는 경로로 전부 다운받은 후에,

2. 판다스로 불러와 전처리하고, 특정 통계치와 차트 서너 개를 생성해서

3. 미리 만들어둔 대시보드 스타일 아래아한글 템플릿에 넣고 다른 이름으로 PDF 저장.

4. 소장님 보여드리게 한 부 출력해놓고

5. 담당부서에 협조전으로 결재상신하면서 PDF파일을 첨부하고,

6. 같이 담당하는 직원에게는 요약 텍스트를 본문에 넣고 PDF를 첨부해서 메일로 발송해준다.

 

2번 과정에서 DRM 때문에 문제가 발생하게 되었습니다.

이 때문에 약간의 꼼수가 필요한데,

간단하게 win32com으로 엑셀을 열고, 해당 파일을 불러온 후에

UsedRange의 모든 값을 튜플로 받아서 처리하거나,

데이터 전체를 복사(클립보드로 저장)한 후에

pd.read_clipboard() 메서드pd.read_excel 대신 사용하는 방법입니다.

엑셀로 직접 파일을 열었기 때문에 DRM이 해제되니까요.

DRM 때문에 판다스를 사용하지 못하시는 분들은 참고하셔서

멋진 자동화 스크립트 작성하시기 바랍니다.

 

#덧

"DRM 때문이라면 그냥 엑셀 VBA를 사용하는 게 훨씬 간편하지 않은가?" 라고 말씀하시는 분들이 계십니다.

맞아요. VB/VBA에서 셀레늄도 실행가능하고, 아래아한글도 오히려 더 쉽게 다룰 수 있는 것 같더라고요.

사실 위의 모든 작업을 VB로 대체할 수 있어요ㅜ 성능도 더 나을지도 몰라요ㄷㄷ

자동화 때문에 파이썬으로 코딩을 시작한다 하시는 분들은,

진지하게, 그리고 심각하게 VBA나 C#도 같이 알아보시는 것을 추천드립니다.

 

그럼 이번 포스팅은 여기서 마칩니다.

행복한 하루 되세요!

반응형

댓글0