아래 한/글 자동화에는 C++, 파이썬, 자바스크립트 등을 사용할 수 있습니다.

 

그런데 엑셀 파일을 읽어와서 한글 파일을 생성한다면

엑셀 VBA를 이용하면 좀 더 효율적일 수 있습니다.

VBA를 사용하면 별도의 프로그램 컴파일러가 필요 없습니다.

한글 파일에 접근할 때 엑셀 시트에 한글 Control을 삽입해서 제어할 수도 있는데

도구> 참조에서 HWPObject 등을 이용해서 아래 한/글창을 별도로 띄우고 해당 파일에 접근할 수 있습니다.

(물론 아래한/글 프로그램이 설치되어 있어야합니다.)

한글 제어에 사용되는 여러가지 명령들은 알기 어렵기 때문에 한글에서 여러가지 동작을 매크로 스크립트로 녹화를 한 다음 녹화된 코드를 약간 수정해서 사용하시면 편리합니다.

한글 Object의 구조입니다. 더 하위 개체의 구조는 자세히 나와있지 않습니다.

코드는 VBA에서 ExceuteMso 처럼 "InsertText", "TableCreate", "Goto", "MoveRight" 등

HAction.Run 이나 HAction.Execute 명령에 내장된 Action 명령 문자열을 Hwp 컨트롤에 넘겨서 실행하는 방식을 많이 이용합니다.

 

    Set App = CreateObject("HwpFrame.HwpObject.2")
    If App Is Nothing Then Exit Sub
    
    '문서 열기
    App.Open Environ("Userprofile") & "\Desktop\한글표.hwp", "HWP", "versionwarning:false"
    Set hWindow = App.XHwpWindows.Active_XHwpWindow
    hWindow.Visible = True
    
    App.HAction.GetDefault "InsertText", App.HParameterSet.HInsertText.HSet
    App.HParameterSet.HInsertText.Text = "글자입력"
    App.HAction.Execute "InsertText", App.HParameterSet.HInsertText.HSet

    App.HAction.GetDefault("Print", App.HParameterSet.HPrint.HSet); // 액션 초기화
    App.HParameterSet.HPrint.NumCopy = 3; //인쇄 매수를 3장으로 지정
    App.HAction.Execute("Print", App.HParameterSet.HPrint.HSet); // 액션 수행

 

 

위 코드는 간단히 파일을 열고 문자열을 문서에 삽입하거나 인쇄명령을 실행하는 코드입니다.

 

명령을 실행할 때는 주로 HAction.GetDefault로 기본 옵션을 초기화한 후

HParameterSet 으로 여러가지 옵션 파라미터 값을 설정한 다음

최종적으로 HAction.Execute 혹은 Run으로 명령을 실행하는 방식입니다.

참고로, 웹상에서 미리 코드를 실행해볼 수도 있습니다.

https://webhwpctrl-example.cloud.hancom.com/run-example?title=Run&main=example.js&init=init.js&path=https://developer.hancom.com/webhwp-examples/action/methods/run/

다음으로 이러한 기본 코드를 바탕으로 이번 작업의 목표대로 엑셀 셀값들을 한글 표에 넣어주면 됩니다.

 

샘플 코드를 첨부합니다.

아래는 바탕화면의 '한글표.hwp' 파일을 열어서

현재 엑셀 시트의 A1:D5에 있는 값들을 가져와서

한글 파일의 가장 첫번째 표의 셀에 차례로 입력해주는 VBA 코드입니다.

 

Option Explicit

Sub Test1()
    Dim App As HwpObject
    Dim hWindow As Object
    Dim Doc As Object, ctrl As Object
    Dim rng As Range, Found As Boolean
    
    Set App = CreateObject("HwpFrame.HwpObject.2")
    If App Is Nothing Then Exit Sub
    '보안 경고 안뜨게
    App.RegisterModule "FilePathCheckDLL", "AutomationModule"
    
    '새 창 생성
    'App.XHwpWindows.Add
    '문서 열기
    App.Open Environ("Userprofile") & "\Desktop\한글표.hwp", "HWP", "versionwarning:false"
    'Set Doc = App.XHwpDocuments.Item(0)
 
    Set hWindow = App.XHwpWindows.Active_XHwpWindow
    hWindow.Visible = True
    
    '표를 찾아 이동
'    App.HAction.GetDefault "Goto", App.HParameterSet.HGotoE.HSet
'    With App.HParameterSet.HGotoE
'        .HSet.SetItem "DialogResult", 55 '표 조판부호 찾기
'        .SetSelectionIndex = 5
'    End With
'    App.HAction.Execute "Goto", App.HParameterSet.HGotoE.HSet
    
    '첫번째 표를 찾아 이동
    Set ctrl = App.HeadCtrl
    Do While Not ctrl Is Nothing
        If ctrl.CtrlID = "tbl" Then
            With ctrl.GetAnchorPos(0)
                App.SetPos .Item("List"), .Item("Para"), .Item("Pos")
            End With
            Found = True
            Exit Do
        End If
        Set ctrl = ctrl.Next
    Loop
    
    If Not Found Then MsgBox "표가 없습니다.": Exit Sub
    App.HAction.Run "MoveRight"
    For Each rng In Range("A1:D5")
        '오른쪽셀로 이동, 셀 내용 삭제
        'App.HAction.Run "MoveRight"
        App.HAction.Run "SelectAll"
        'App.HAction.Run "Delete"
        'App.HAction.Run "TableCellBlock"

        '문자열 입력
        App.HAction.GetDefault "InsertText", App.HParameterSet.HInsertText.HSet
        App.HParameterSet.HInsertText.Text = rng.Value
        App.HAction.Execute "InsertText", App.HParameterSet.HInsertText.HSet
        App.MovePos 101, 0, 0   '101:"moveRightOfCell"
    Next rng
 
    'App.XHwpMessageBox.String = "완료"
    'App.XHwpMessageBox.DoModal
    
    '저장
    'App.Save ""
    'App.SaveAs Environ("Userprofile") & "\Desktop\test.hwp", "HWP", ""
    
    Set App = Nothing
End Sub

 

 

실행 화면:

 

한글 API 관련 문서와 보안 경고 방지 방법, 개발자 포럼 등은 링크를 참고하세요.

https://developer.hancom.com/hwpautomation

https://forum.developer.hancom.com/c/hwp-automation/52

 

 

HWP표내용입력1.xlsm
0.04MB

 

한글표.hwp
0.02MB