본문 바로가기
아래아한글 자동화/python+hwp 중급

[교육업무자동화2/7] 청구서자동화2(필드에 텍스트 자동입력)

by 일코 2021. 1. 22.

지난 포스팅은...

 

[교육업무자동화1/10] 청구서자동화1(누름틀 다루기)

(전략) 우리 ㅇㅇㅇㅇㅇㅇ협회 교육운영팀은 20XX년부터 고용노동부 국가인적자원개발 컨소시엄 사업으로 전환하여 비회원사까지 대상으로 교육을 개최할 수 있게 되어 매우 큰 자긍심을 가

www.martinii.fun


 

이번 포스팅의 내용은 지난 포스팅에서 언급한 것처럼, 교육생 정보가 담긴 엑셀파일 등에서 각 행의 값들을 해당하는 누름틀(필드)에 차례로 삽입하는 과정을 자세히 설명하고자 한다.

 

1. 파이썬을 통해 한/글을 실행해보자.

이 부분은 솔직하게 먼저 한 가지 말씀드리고 넘어가야겠다.
필자는 기존에 열려 있는 한글창을 파이썬으로 연결하는 방법을 모른다.
pywinauto를 통해 기존에 열린 창의 GUI를 제어하는 방법은 있지만,
그렇게 접근하면 API 명령어는 사용할 수 없더라..
혹시 방법을 아시는 독자분께서는 댓글로 알려주시면 사례드리고 싶다.

 

위의 이유로, 자동화작업을 할 한/글 파일은 직접 열지 않고 파이썬으로 열어준다.

파이썬으로 한/글 파일을 여는 방법은 간단하다.
파이참을 열어서, 코드로 한/글을 열고, hwp.Open(파일명) 메서드로 HWP파일을 불러오면 된다.
파이참이나 서브라임텍스트, IDLE든 커맨드프롬프트든, 파이썬 코드를 실행할 수 있는 프로그램을 실행하고
아래 코드를 입력하고 실행하면 된다.

import win32com.client as win32
hwp = win32.Dispatch("HWPFrame.HwpObject")
hwp.Open(파일경로)

코드 실행방법은 프로그램마다 다르며, 필자는 불친절하게 파이참 기준으로만 설명할 예정이니 양해 바란다.
Shift-Alt-E는 파이썬콘솔창을 생성하고, 해당 라인의 코드만 실행하는 단축키이다. 한 줄만 딸랑 실행할 수 있다.
여러 줄을 한 번에 실행하고 싶으면 실행하고 싶은 라인을 전부 선택하고, Shift-Alt-E를 누르면 된다.

파일 안의 모든 코드를 다 실행하고 싶으면
1. Ctrl-A를 누르고 Shift-Alt-E를 눌러도 되지만,
2. Shift-Alt-F10을 눌러서 파일 자체를 실행하는 방법도 있다. (한 번 실행하고 난 후엔 Shift-F10으로 빠른실행)

하여튼,
우리처럼 매크로 스크립트를 실행하는 경우라면 한 줄씩 실행해보고 결과를 관찰하는 것이 편하므로
필자는 대부분의 경우, Run(Shift-Alt-F10) 대신, Execute Line in Python Console(Shift-Alt-E)을 사용한다.

(클릭) 실행할 코드를 선택하고 Shift-Alt-E를 눌러 실행했다.

그런데 한/글 창이 나타나지 않는다? 
뭔가 한/글 팝업은 떴던 것 같은데, 정작 한/글 창이 보이지 않는다.
당황하지 말자. 한/글은 정상적으로 실행되었다.
다만, 기본적으로 자동화 실행시 백그라운드에서 실행된다.
Ctrl-Shift-Esc를 눌러 작업관리자를 실행해보면?

백그라운드 프로세스에 한/글이 실행되어 있는 것을 확인할 수 있다.

이걸 화면에 보이게 하려면 아래의 코드 한 줄만 추가로 실행하면 된다.

hwp.XHwpWindows.Item(0).Visible = True

이제 한/글 창이 나타났다.

(클릭) Visible = True 실행

이렇게 한/글 창을 띄웠다.
참고로 한글2018 출시 때까지는, 화면에 나타나는 게 기본값이어서
백그라운드로 숨기기 위해 별도의 코드를 입력해야 했다. (hwp.XHwpWindows.Item(1).Visible = False)
필자도 유튜브채널 개설하고 얼마 안 있어 "한/글이 화면에 나타나지 않는다"는 문의댓글에 어리둥절한 적이 있었다.

하여튼, 여기까지 파이썬으로 한/글을 여는 방법을 알아보았다.

참고로, Open 메서드로 파일 불러오기를 할 때 팝업이 하나 떴다.
"모두 허용" 클릭 한 번이면 넘어갈 수 있지만, 이것마저 자동화하고 싶은(귀찮은) 분들은
아래 포스팅을 참고하기 바란다.

 

[파이썬-한/글] 보안모듈 설치방법(귀찮은 보안팝업 제거)

안녕하세요? 유튜브에서도 초반에 설명드렸던 주제인데 블로그에도 한 번 옮겨적어봅니다. 아래아한글을 파이썬이나 자바스크립트 등 외부프로그램으로 제어하면서 파일을 열고 기록하거나,

www.martinii.fun

 


 

2. 문서 내의 누름틀 필드 목록을 가져와보자.

여기까지 잘 따라오셨다면, 여러분의 모니터에도 아래처럼 파이참과 한/글이 열려 있을 것이다.

우리 모니터엔 한/글과 파이참이 열려 있다.

지난 포스팅에서 입력했던 한/글 파일 누름틀 이름들을 기억하는가?
기억나지 않는다면, hwp.GetFieldList() 메서드를 실행해보자.
아래 콘솔창에 hwp.GetFieldList()를 입력하고 엔터를 치면,

콘솔창에 hwp.GetFieldList() 메서드를 실행한 결과화면

생소한 글자(\x02)들이 껴들어가 있지만, 간단히 "구분문자"의 한 종류라고 생각하면 된다.
파이썬을 다뤄본 적 있는 초보 분들이라면 문자열 자료의 split 메서드를 떠올릴 것이다.
맞다. split을 사용해 위의 문자열을 리스트로 만들어보자.

split 메서드를 사용해 누름틀 리스트를 생성했다.

문자열.split(구분자) 메서드는 괄호 안의 구분자가 일종의 "칼"이 되어 문자열을 쪼개주는 함수라고 생각하면 편하다.
field_list에다가 필드명 6개를 담았다.
이제 필드명을 통해 누름틀에 값을 입력해보자.

이 멍청해 보이는 짓을 왜 하나 싶겠지만, 곧 엑셀과 연동해서 수십수백장의 문서도 몇초만에 작성할 수 있으니
인내심을 조금만 가지고 따라와주기 바란다.

 


 

3. 파이썬으로 문서 누름틀에 값을 넣어보자.

좌측상단 "금액한글" 필드에 "일백만",
그 옆의 "금액숫자" 필드에 "1,000,000"을 넣어보겠다.

바로 이 부분에 값을 넣어보자.

 누름틀에 값을 넣는 메서드는 hwp.PutFieldText이다.

[파이참팁] 파이참 자동완성기능을 최대한 활용하자. 팝업이 떴을 때 원하는 메서드를 선택하고 Ctrl-Space를 누르면 자동완성

PutFieldText메서드는 두 개의 인자가 필요하다. 바로 "Field(어디에)"와, "Text(무엇을)" 넣느냐이다.

[파이참팁] 자동완성직후, 혹은 괄호 안에 캐럿을 놓고 Ctrl-P를 누르면 입력할 파라미터의 목록이 작게 나타난다.

hwp.PutFieldText(Field="금액한글", Text="일백만")

위처럼 입력해도 되고, 간단히

hwp.PutFieldText("금액한글", "일백만")

라고 입력해도 된다.

(GIF) "금액한글" 필드에 "일백만"을 입력해보았다.

연습삼아 (귀찮지만) 다른 필드에도 값을 직접 완성해보자. 다섯개만 더 입력하면

해당 필드에 모든 값을 "직접"입력했다.

그러면 한/글 문서도 아래와 같이 완성되었다.

문서가 허접해 보이는데, 앞단은 꾸미기 나름이다. 파이썬 코드가 핵심이니 거기에만 집중해달라.

 


 

4. 리스트와 for문, 그리고 enumerate를 사용해서 간단히 입력해보자.

파이썬 문법에 익숙하거나 enumerate를 다룰 줄 아신다면 이번챕터는 읽지 않으셔도 된다.
파이썬 문법에 익숙해지는 만큼 앞으로 자동화할 때, 보다 간편한 입력방법들을 생각해낼 수 있을 것이다.
이번엔 for문과 리스트, enumerate를 사용하는 방법을 소개해드리는데, 
우선 한/글창에서 Ctrl-Z로 원래상태로 되돌리고, 아래처럼 작성해서 실행해보자. 

field_list와 text_list를 매칭해서 한/글에 차례대로 입력하는 명령어. 사전에 text_list를 먼저 작성해야 한다.

반복을 위한 파이썬 문법 중 하나인 for문이다.
필드가 한두 개면 하나씩 입력해도 괜찮은데,
열 개, 백 개, 많아질수록 일일이 입력하기 힘들어지기 때문이다.
위의 코드대로 입력하고 실행해보면,

(GIF) 두 개의 리스트를 가지고 for문 한번에 한 페이지 완성

for문 한 번에 한 페이지가 간단히 완성되었다. 오예!

 


 

5. 엑셀 연동해서 페이지별 text_list를 뽑아내기만 하면?

여기까지 잘 따라와 주었다면, text_list만 바뀌면, 새로운 문서를 만들어낼 수 있다는 걸 이해했을 것이다.

다행히 제목이 모든 걸 설명해준다. 엑셀파일에서 한 행을 복사해서 파이썬에 text_list로 가져오면?

그 후엔 위의 for문만 N번 반복실행해도 문서 하나가 완성될 것이다.

여기서 N은 엑셀파일의 데이터행 수 정도 되겠다.

 

포스팅이 생각보다 길어져서, 여기서 한 번 자르고 다음 포스팅에서 엑셀연동 파트를 진행해야겠다.

오늘 포스팅은 여기까지.

 


 

TMI) 위 과정은 pd.DataFrame을 통해 더 간편하게 진행할 수도 있다.
파이썬을 조금이라도 다뤄본 분들은 대부분 df를 사용할 것으로 생각한다. 
다만, 필자의 업무용PC는 모든 문서파일에 FasooDRM이 걸려 있어,
엑셀이 아닌 파이썬 모듈을 통해 엑셀파일을 열 수 없다. (이거 하자고 일일이 부서장의 승인을 받기란ㅜ)
한 가지 꼼수로 엑셀파일을 엑셀로 열고 전체선택 후 클립보드에 복사를 하면
pd.read_clipboard 를 통해 df로 불러올 수는 있다. 
언젠가 한 번은 df와 한/글 파일을 연동하는 방법을 포스팅으로 소개하겠다.

 


 

다음 포스팅은...

 

[교육업무자동화3/10] 청구서자동화3(파이썬으로 엑셀 열어서 값 얻기)

지난 포스팅은... [교육업무자동화2/10] 청구서자동화2(필드에 텍스트 자동입력) 지난 포스팅은... [교육업무자동화1/10] 청구서자동화1(누름틀 다루기) (전략) 우리 ㅇㅇㅇㅇㅇㅇ협회 교육운영팀은

www.martinii.fun

 

 


국내 유일의 파이썬+한컴오피스 업무자동화 입문강의

 

움짤로 빠르게 배우는 파이썬-아래아한글 자동화 레시피 - 인프런 | 강의

파이썬으로 아래아한글을 다루는 짧은 예제코드들을 소개하고, 중간중간의 결과를 GIF로 보여드립니다. 동영상 강의가 아니지만 오히려 빠르게 배울 수 있고, 따라하기도 쉽습니다., - 강의 소개

www.inflearn.com

 

댓글