Type Here to Get Search Results !

05 Go언어:HWP자동화: 문자 입력하기

여기서는 Go언어 및 gohwp 패키지를 이용하여 한글 HWP 문서에 문자를 입력하는 것 보이겠습니다. 

한글워드프로세서 HWP가 결국 문서 작성을 위한 것인데, 자동화를 하기 위해서라면 당연히 문자를 입력할 줄 알아야 합니다. 문자를 입력하는 방법은 어떠한 메서드를 사용하느냐에 따라 다음과 같이 다양하게 구현이 가능합니다. 


package main

import (
    "github.com/b612nightsky/gohwp"
)

func main() {
    hwp := gohwp.Initialize()
    defer hwp.UnInitialize()
    hwp.ShowWindow(true)
    hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModuleExample")

    // 첫째 방법
    hwp.InsertText("첫째: InsertText()\r\n안녕하세요\r\n")

    // 둘째 방법
    hwp.ActionObject().ActionInput().InsertText("Text", "둘째 방법: ActionObject()\r\n")
    hwp.ActionObject().ActionInput().InsertText("Text", "안녕하세요\r\n")

    // 셋째 방법
    hwp.ActionWithParameters("InsertText", "Text", "셋째 방법: ActionWithParameters()\r\n")
    hwp.ActionWithParameters("InsertText", "Text", "안녕하세요\r\n")

    // 넷째 방법
    act := hwp.CreateAction("InsertText")
    set := act.CreateSet()
    act.GetDefault(set)
set.SetItem("Text", "넷째 방법: CreateAction()\r\n안녕하세요\r\n")
act.Execute(set)
// 다섯째 방법 hact := hwp.HAction() hset := hwp.HParameterSet().HInsertText()
hact.GetDefault("InsertText", hset.HSet())
hset.Text("다섯째 방법: HAction\r\n안녕하세요\r\n")
hact.Execute("InsertText", hset.HSet())
}


위의 코드를 실행하면 아래와 같이 HWP 문서창이 뜨고 문자가 입력이 됩니다.



코드를 하나씩 살펴보면 첫째 방법은 다음과 같습니다.


    // 첫째 방법
    hwp.InsertText("첫째: InsertText()\r\n안녕하세요\r\n")

InsertText() 메서드에 문자열을 넘겨주는 형태로 가장 단순한 방법입니다. 여기서 눈여겨 봐야할 것은 "\r\n"입니다. 윈도우즈에서는 줄바꿈이 "\r\n"입니다. 즉, 문서에서 엔터를 눌러 다음 줄로 넘긴 효과입니다.

문자를 입력하는 것은 첫째 방법으로 하시는 것이 가장 편합니다만, 여러 방법을 보여드린 이유가 있습니다.
자동화 코드를 작성하다보면 API 메뉴얼도 봐야하고, 실제 HWP에서 한글 스크립트 매크로도 꽤 자주 보게 될 것입니다. 가장 기본적이고 정석적인 방법은 넷째와 다섯째 방법입니다.

다섯째 방법부터 반대로 살펴보겠습니다.

    // 다섯째 방법
    hact := hwp.HAction()
    hset := hwp.HParameterSet().HInsertText()
hact.GetDefault("InsertText", hset.HSet())
hset.Text("다섯째 방법: HAction\r\n안녕하세요\r\n")
hact.Execute("InsertText", hset.HSet())


한 줄씩 살펴보면, 

  • 우선 HAction 액션 객체를 만듭니다. HWP에서 문서를 다루는 모든 행위를 액션이라고 보시면 됩니다. 첫 줄까지는 아직 어떠한 액션인지는 정해지지 않았습니다.
  • 두 번째 줄에서 보면 파라이터 세트 HParameterSet 중에서도 문자 입력 파라미터를 가지는 HInsertText 파라미터 세트를 만듭니다. 여기에서도 파라미터 세트에는 실질적인 어떠한 값이 들어있지 않습니다. 모든 파라미터 세트는 HSet을 가지고 있습니다. HInsertText라는 파라미터 세트도 HSet을 가지고 있고 이게 어떠한 형태로든 초기화가 되어야 무엇이든 할 수 있습니다.
  • 세 번째 줄에서는 액션의 GetDefault 메서드를 이용하여 앞서 만든 파라미터 세트에 문자열을 입력하는 액션("InsertText")의 디폴트 값으로 초기화합니다. (액션에 따라 GetDefault를 안해도 문제 없는 듯이 작동하는 것들이 있긴한데, GetDefault를 해주는 것이 정석이랄까요..)
  • 네 번째 줄에서는 HInsertText 파라미터 세트가 가지는 Text라는 문자열 변수에 입력될 문자를 입력합니다.
  • 마지막으로 앞서 만들고, 초기화하고, 값을 입력한 HInsertText 파라미터 세트를 이용하여 "InsertText" 액션을 실행합니다.

설명이 지저분하게 되었는데, 실은 이 방법이 정석이라 할 수 있습니다.


넷째 방법은 다음과 같은 코드였습니다.


    // 넷째 방법
    act := hwp.CreateAction("InsertText")
    set := act.CreateSet()
act.GetDefault(set)
set.SetItem("Text", "넷째 방법: CreateAction()\r\n안녕하세요\r\n")
act.Execute(set)


이건 IDHwpAction이라는 클래스를 이용하는 방법으로 한컴에서 편의를 제공하고자 만들어 놓은 것으로 보입니다. 앞서 설명한 다섯째 방법과 전체적인 흐름이 같다는 것을 알 수 있습니다. "InsertText" 액션을 만들고, 파라미터 세트를 만들고, 파라미터 세트를 액션에 맞춰 초기화하고, 파라미터 세트에 필요한 값을 넣고, 액션을 실행. 넷째 방법과 다섯째 방법은 표현이 조금 다를 뿐이지 정말 똑같은 흐름입니다.


셋째 방법은 다음과 같습니다.


    // 셋째 방법
    hwp.ActionWithParameters("InsertText", "Text", "셋째 방법: ActionWithParameters()\r\n")
    hwp.ActionWithParameters("InsertText", "Text", "안녕하세요\r\n")


여기서부터 정말 별것 없습니다. ActionWithParameters() 메서드는 내부적으로 그냥 넷째 방법을 실행하는 메서드일 뿐입니다.


둘째 방법도 똑같습니다.


    // 둘째 방법
    hwp.ActionObject().ActionInput().InsertText("Text", "둘째 방법: ActionObject()\r\n")
    hwp.ActionObject().ActionInput().InsertText("Text", "안녕하세요\r\n")

표현만 다르지, 둘째 방법도 셋째, 넷째 방법의 메서드를 이용합니다. 다만 액션 이름을 문자

열로 입력하는 것만 빠졌을 뿐입니다.


그럼, 첫째 방법도 똑같을 것이라 생각할 수 있겠죠? 메서드는 정말 간단하게 한줄로 되어 있는데, 내부에서는 결국 위와 같이 액션, 파라미터 만들고 값을 넣고 실행하는 코드가 있습니다.


    hwp.InsertText("안녕하세요")


문자를 입력하는 것은 위와 같이 한줄만 소개할수도 있었습니다. 다른 방법을 보여드린 이유는 앞으로 다른 편집들을 하나하나 해보게 될텐데, 위의 다섯째 방법을 기본적인 방법이라 생각하고 접근하는 일이 많을 것이기 때문입니다.


Go언어로 HWP 자동화에 대한 5번째 포스팅인데 이제서야 문자 입력이네요. 별 내용이 없는 것 같아 죄송한 마음이 듭니다. 다음부터 실질적으로 쓰일 것들을 하나씩 포스팅해보겠습니다.

댓글 쓰기

0 댓글
* Please Don't Spam Here. All the Comments are Reviewed by Admin.