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

파이썬으로 한/글 파일에 텍스트를 입력하는 방법

by 일코 2022. 5. 9.

파이썬으로 한/글을 실행하는 방법을 모른다면?

 

파이썬으로 아래아한글 실행하는 방법

1. python.org에서 파이썬을 다운받아 설치한다. 2. 커맨드프롬프트에서 "pip install pywin32"를 실행해서 win32com 모듈을 설치한다. 3. 파이썬을 실행하고 아래 코드를 실행한다. import win32com.client as..

martinii.fun

 


 

<파이썬으로 한/글 파일에 텍스트를 입력하는 방법>

 

1. InsertText 액션을 이용하여 텍스트 입력

파이썬으로 한/글을 열었을 때

텍스트를 입력하는 가장 기본적인 방법은

아래와 같이 InsertText 액션을 정의하고 실행하는 것입니다.

hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet)
hwp.HParameterSet.HInsertText.Text = "입력할 텍스트"
hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet)

위 방법의 장점으로는

① 속도가 가장 빠르다.

② 파라미터가 Text 하나로 함수로 만들기가 쉽다.

등을 들 수 있습니다.

 

다만, 코드가 다소 길고, 한/글 액션 특성상 세 줄이나 실행해야 하기 때문에

바로 사용하기는 부담스럽고,

아래와 같이 함수로 만들어 활용하면 편합니다.

def insert_text(text):
    hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet)
    hwp.HParameterSet.HInsertText.Text = text
    hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet)
    
    
insert_text("Hello World")

가장 기초적이고 기본적인 방법이지만, 실제로는 잘 사용하지 않게 됩니다.
마지막에 보여드릴 누름틀(필드)을 사용하는 더 좋은 방법이 있기 때문입니다.

 

2. 클립보드 활용하여 텍스트 입력

파이썬에서 가장 많이 사용하는 클립보드 모듈은 pyperclip입니다.

pyperclip.copy(text)로 text를 클립보드에 집어넣을 수 있고

pyperclip.paste()는 클립보드에 있는 텍스트를 문자열로 가져옵니다.

또한 한/글에서는 hwp.Run("Paste")으로 클립보드에 있는 문자열을 문서에 입력해줍니다.

이를 활용하면 아래와 같이 짧은 코드로 (클립보드를 통해) 텍스트를 입력할 수 있습니다.

import pyperclip as cb


cb.copy("Hello World")
hwp.Run("Paste")

이 명령의 가장 큰 장점은 "코드가 짧고 직관적"이라는 것입니다.
다만 작은 단점이 있는데,
클립보드를 사용하기 때문에, 오류발생 가능성이 있다는 것입니다.
자동화 작업중에는 절대 클립보드를 사용하면 안됩니다.

 

3. 누름틀(필드) 이용하여 텍스트 입력

한/글에서 제공하는 기본기능인 "누름틀(필드)"을 통해 텍스트를 입력하는 방법입니다.

아래의 세 단계로 실행합니다. (필드를 재활용하려면 과정③은 생략합니다.)

 

① 텍스트를 삽입할 장소에 특정 이름의 누름틀(필드)을 생성하고,

② 해당 필드에 텍스트를 입력합니다.

③ 필드를 지웁니다. (입력한 문자열은 그대로 유지됩니다.)

# ① 필드 생성
hwp.CreateField(
    Direction="입력칸",
    memo="텍스트 입력",
    name="textarea")

# ② 텍스트 입력
hwp.PutFieldText(
    "textarea",
    "Hello World")

# ③ 필드 삭제
hwp.Run("DeleteField")

저는 개인적으로 이 방법(필드를 통한 입력)을 가장 선호합니다.
필드를 통한 문자열 입력은
처음엔 코드가 다소 길고 복잡해 보이지만,
아주 강력한 두 가지 장점이 있습니다.

① 문서에 입력위치를 미리 정해놓을 수 있다.
② 여러 개의 필드에 한 번에 문자열을 입력할수 있다.

 

3-1. 여러 개의 누름틀에 동시에 입력하기

한/글에서 수작업으로 여러 개의 필드를 미리 만들어놓은 경우,

코드 한 줄만으로 모든 필드에 단번에 값을 채울 수 있습니다.

속도도 어마어마하게 빠릅니다.

대신 파라미터로 파이썬의 기본 자료형인 리스트나 튜플이 아닌

"\x02"를 구분자로 하는 문자열을 받아야 합니다.

아래의 예시코드를 보면 쉽게 이해하실 것입니다.

필드리스트 = ["국어점수", "영어점수", "수학점수", "과학점수"]

점수리스트 = ["90", "95", "80", "60"]

hwp.PutFieldText(
    "\x02".join(필드리스트),
    "\x02".join(점수리스트))

이 방법을 적용하면,
엑셀파일의 수백 수천개의 셀 값을
한/글파일 각각의 필드에 넣을 때에도
순식간에 문서가 완성됩니다.

 

수백개의 필드 하나하나에 값을 하나씩 집어넣으면

아래처럼 다소 긴 시간이 소요되기도 합니다.

굳이 단점이라면.. 비교적 느리고 자동으로 문서가 완성되는 걸 멍하니 계속 쳐다보게 됨

 

결론 : 누름틀을 활용합시다

여기까지 파이썬으로 한/글 본문에 텍스트를 입력하는

세 가지 방법을 알아보았습니다.

① InsertText 액션 정의

② 클립보드 활용

③ 누름틀(필드) 활용

 

경우에 따라 적절한 방법이 다르겠지만,

보편적으로 가장 쉽게 사용할 수 있는 방법은 역시

"누름틀(필드)을 이용한 입력"이라고 생각합니다.

입력위치까지 찾아가는 과정을 코드로 작성하는 것이 굉장히 번거롭기 때문입니다.

 

그럼 이번 포스팅은 여기서 마치겠습니다.

행복한 하루 되세요!

 


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

 

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

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

www.inflearn.com

 

댓글