Type Here to Get Search Results !

09 Go언어:HWP자동화: 표 만들기

 

이번 글에서는 Go언어와 gohwp를 이용하여 표를 만드는 것을 보이도록 하겠습니다.


한글 HWP 자동화를 코드로 구현하는데 있어서 여러 가지 액션을 다루게 되는데, "표를 만들 때"와 "표의 속성을 다룰 때"의 파라미터 세트가 서로 다릅니다. 표와 관련한 파라미터 세트를 대강 살펴보면 아래와 같습니다.

  • HTable 
  • HTableCreation
  • HTableChartInfo 
  • HTableDeleteLine
  • HTableInsertLine
  • 등등..

근데, 막상 표 모양이나 셀을 다루려고 보면 HShapeObject, HCell 등의 파라미터 세트를 다루게 됩니다.


일단, 여기서는 표를 만들어야 하니 HTableCreation 파라미터 세트를 이용하게 됩니다.


표를 생성할 때 파라미터 세트는 "HTableCreation"인데, 표를 생성하는 액션 이름은 "TableCreate"입니다. 액션과 파라미터 이름이 비슷한데 하나는 -te, 다른 하나는 -tion이라 종종 실수를 하게 됩니다. 사소한 것이긴 한데, 왜 이렇게 이름을 지었는지 모르겠네요. 


표를 생성하는 예제는 아래와 같습니다.


package main

import (
    "strconv"

    "github.com/b612nightsky/gohwp"
)

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

    // 단순하게 만들기 3열 2행 표
    hwp.InsertText("만들어라 표\r\n")
    hwp.ActionObject().ActionTable().TableCreate("Cols", 3, "Rows", 2, "WidthType", 1)
    for i := 1; i <= 6; i++ {
        hwp.InsertText(strconv.Itoa(i))
        hwp.ActionObject().ActionEdit().MoveRight()
    }

    // HAction 이용한 표만들기
    hwp.InsertText("\r\nHAction을 이용\r\n")
    act := hwp.HAction()
    set := hwp.HParameterSet().HTableCreation()
    act.GetDefault("TableCreate", set.HSet())
    set.Rows(2)
    set.Cols(3)
    set.HeightType(1)
    set.WidthType(2)
    set.CreateItemArray("RowHeight", 2)
    set.CreateItemArray("ColWidth", 3)
    rh := set.RowHeight()
    rh.Item(0, hwp.MiliToHwpUnit(10.))
    rh.Item(1, hwp.MiliToHwpUnit(30.))
    wd := set.ColWidth()
    wd.Item(0, hwp.MiliToHwpUnit(10.))
    wd.Item(1, hwp.MiliToHwpUnit(30.))
    wd.Item(2, hwp.MiliToHwpUnit(50.))
    act.Execute("TableCreate", set.HSet())
    for i := 1; i <= 6; i++ {
        hwp.InsertText(strconv.Itoa(i))
        hwp.ActionObject().ActionEdit().MoveRight()
    }
}


위 코드를 실행하면 아래와 같이 표가 만들어집니다.


코드를 살펴보면 다음과 같습니다.

hwp.ActionObject().ActionTable().TableCreate("Cols", 3, "Rows", 2, "WidthType", 1)

위의 한 줄로 3개의 열과 2개의 행을 가지는 표가 만들어집니다. 좀 더 단순하게 보면,

hwp.ActionWithParameters("TableCreate", "Cols", 3, "Rows", 2)

TableCreate 액션을 행과 열 2개의 옵션 값만 주고 생성 시키면 됩니다. "WidthType"은 표의 너비를 지정하는 옵션으로 1은 문단 폭에 맞추라는 옵션입니다.
표를 만들고 우측으로 하나씩 커서를 움직이면서 숫자를 입력했습니다.


이제 HAction을 이용하여 표를 만드는 것을 살펴보겠습니다. 

act := hwp.HAction()
set := hwp.HParameterSet().HTableCreation()
act.GetDefault("TableCreate", set.HSet())
set.Rows(2)
set.Cols(3)
set.HeightType(1)
set.WidthType(2)
set.CreateItemArray("RowHeight", 2)
set.CreateItemArray("ColWidth", 3)
rh := set.RowHeight()
rh.Item(0, hwp.MiliToHwpUnit(10.))
rh.Item(1, hwp.MiliToHwpUnit(30.))
wd := set.ColWidth()
wd.Item(0, hwp.MiliToHwpUnit(10.))
wd.Item(1, hwp.MiliToHwpUnit(30.))
wd.Item(2, hwp.MiliToHwpUnit(50.))

표를 만들때 간단하게 넣을 수 있는 옵션들은 앞서 한 줄로 보인 방법으로 다 처리할 수 있습니다. 하지만 행/열마다 높이/너비를 다르게 지정하고 싶을 때는 각 행/열의 높이/너비 값을 지니는 배열 파라미터 세트 HArray를 가지게 되는데, 이건 한 줄로 단순하게 처리할 수 없습니다.

바로 위 HAction을 이용한 예제에서는 높이와 너비를 각각 임의의 값으로 설정하고 있는데 높이만 한정지어 살펴보면,

set.HeightType(1)
set.CreateItemArray("RowHeight", 2)
rh := set.RowHeight()
rh.Item(0, hwp.MiliToHwpUnit(10.))
rh.Item(1, hwp.MiliToHwpUnit(30.))

  • 일단 높이를 임의의 값으로 하겠다고 HeightType(1)로 선언합니다.
  • RowHeight이 2개의 값을 가지는 배열임을 CreateItemArray("RowHeight",2)로 선언합니다.
  • RowHeight()은 HArray를 반환하며, Item 메서드로 배열에 값을 입력합니다.

일단 이렇게 표를 만들 수 있긴 한데, 표를 만들 때부터 번거로운 편집을 해야할까 싶습니다. 어차피 표를 생성하고 나서 각 행이나 열, 셀 별로 따로 모양 편집을 하게 된다면 표는 단순하게 생성하고 나중에 모양 편집할 때 같이 수정하는게 더 용이하지 않을까 싶습니다.

지금까지 표를 만드는 방법을 간략하게 살펴보았습니다.


인터넷 커뮤니티에서 HWP 때문에 정보화 문서에 대한 갈라파고스가 되고 있다는 비난이 있을 때마다 HWP의 장점으로 이야기되는 것 중 하나가 바로 "표" 기능입니다. 많은 사람들에게서 언급되고 저 역시 체감으로 느꼈던 것이 표 기능이었습니다. 박사학위 논문 작성을 MS워드를 이용했었는데, HWP에 비해 아쉬웠던 것을 뽑으라면 수식과 표 기능이었습니다. 솔직히 MS워드의 표 기능은 HWP에 비할 것이 안된다고 생각하는데, 요즘에는 좀 나아졌으려나요.

표는 그 속의 내용이 텍스트일지라도 시각적으로 정보를 전달하는 효과적인 방식입니다. 수치와 같은 정보나, 다양한 데이터를 효율적으로 비교 할 수 있고, 행과 열을 통해 정보의 연관성을 쉽게 파악할 수 있게 합니다. 또한 정보를 간결하게 구성, 표현하여 이해하기 용이하게 만듭니다. 자동화 코드를 잘 활용하면 excel 등의 자료에서 각종 수치를 가져와 한글 HWP 표로 작성하는 것도 가능하니, 잘 활용하시길 바랍니다.

댓글 쓰기

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