■ 아래 한글 테이블 추가하기 예제

----------------------------------------------------------------------------------------------------

HWPHideSecurityWarningWindow pHwpCtrl

 

pHwpCtrl.EditMode = 0

    

pHwpCtrl.Open "c:\template.hwp"

    

pHwpCtrl.MovePos 3

 

'--------------------------------------------------

' 테이블 초기화 데이터를 생성한다. (컬럼 수 : 8)

'--------------------------------------------------

Dim pColumnWidthArray     As Variant ' 컬럼 너비 배열 (단위 : 밀리미터)

Dim pColumnAlignmentArray As Variant ' 컬럼 정렬 배열 ; 왼쪽 정렬(L), 가운데 정렬(C), 오른쪽 정렬(R)

Dim pColumnHeaderArray    As Variant ' 컬럼 헤더 배열

 

ReDim pColumnWidthArray(1 To 8) As Variant

ReDim pColumnAlignmentArray(1 To 8) As Variant

ReDim pColumnHeaderArray(1 To 8) As Variant

 

' A4 가로 페이지 여백 10mm 설정시 이용 가능 크기 : 약 246 mm

pColumnWidthArray(1) = 30.75

pColumnWidthArray(2) = 30.75

pColumnWidthArray(3) = 30.75

pColumnWidthArray(4) = 30.75

pColumnWidthArray(5) = 30.75

pColumnWidthArray(6) = 30.75

pColumnWidthArray(7) = 30.75

pColumnWidthArray(8) = 30.75

 

pColumnAlignmentArray(1) = "L"

pColumnAlignmentArray(2) = "C"

pColumnAlignmentArray(3) = "R"

pColumnAlignmentArray(4) = "L"

pColumnAlignmentArray(5) = "L"

pColumnAlignmentArray(6) = "R"

pColumnAlignmentArray(7) = "L"

pColumnAlignmentArray(8) = "L"

 

pColumnHeaderArray(1) = "가"

pColumnHeaderArray(2) = "나"

pColumnHeaderArray(3) = "다"

pColumnHeaderArray(4) = "라"

pColumnHeaderArray(5) = "마"

pColumnHeaderArray(6) = "바"

pColumnHeaderArray(7) = "사"

pColumnHeaderArray(8) = "아"

 

'--------------------------------------------------

' 테이블 데이터를 생성한다.

' ※ 일반적으로 데이터베이스 조회 데이터를 설정한다.

'--------------------------------------------------

Dim strValueArray() As String

 

ReDim strValueArray(1 To 200, 1 To 8) As String

 

Dim Y, X

 

For Y = 1 To 200

 

    For X = 1 To 3

    

        strValueArray(Y, X) = "Z" & Y & "," & X

    

    Next X

 

Next Y

 

'--------------------------------------------------

' 페이지 방향을 설정한다.

'--------------------------------------------------

HWPSetPageDirection pHwpCtrl, True

 

'--------------------------------------------------

' 테이블을 초기화 한다.

'--------------------------------------------------

HWPInitializeTable pHwpCtrl, 8, pColumnWidthArray, pColumnAlignmentArray, pColumnHeaderArray

 

'--------------------------------------------------

' 리포트 테이블을 추가한다.

'--------------------------------------------------

HWPInsertReportTable pHwpCtrl, strValueArray, 30, 30

 

 

pHwpCtrl.MovePos 2

----------------------------------------------------------------------------------------------------

※ HWPHideSecurityWarningWindow 메소드 : "아래 한글 문서 여는 경우 보안 경고창 숨기기" 참조

※ HWPSetPageDirection 메소드          : "아래 한글 페이지 방향 설정하기" 참조

 

■ 아래 한글 테이블 추가하기

----------------------------------------------------------------------------------------------------

Option Explicit

 

Dim m_pTableAction              As HwpAction         ' 테이블 생성 액션 객체

Dim m_pTableParameterSet        As HwpParameterSet   ' 테이블 생성 파라미터 세트 객체

Dim m_pTableParameterArray      As HwpParameterArray ' 테이블 생성 파라미터 배열 객체

 

Dim m_pTextAction               As HwpAction         ' 텍스트 추가 액션 객체

Dim m_pTextParameterSet         As HwpParameterSet   ' 텍스트 추가 파라미터 세트 객체

 

Dim m_nColumnCount              As Integer           ' 컬럼 수

Dim m_dColumnWidthArray()       As Double            ' 컬럼 너비 배열

Dim m_strColumnAlignmentArray() As String            ' 컬럼 정렬 배열

Dim m_strColumnHeaderArray()    As String            ' 컬럼 헤더 배열

 

'--------------------------------------------------

' 아래 한글 테이블 초기화 하기

'--------------------------------------------------

' pHwpCtrl              : HwpCtrl OCX

' nColumnCount          : 컬럼 수

' pColumnWidthArray     : 컬럼 너비 배열 (인덱스는 1부터 시작)

' pColumnAlignmentArray : 컬럼 정렬 배열 (인덱스는 1부터 시작)

' pColumnHeaderArray    : 컬럼 헤더 배열 (인덱스는 1부터 시작)

'--------------------------------------------------

Public Sub HWPInitializeTable(pHwpCtrl As HwpCtrl, nColumnCount As Integer, pColumnWidthArray As Variant, pColumnAlignmentArray As Variant, pColumnHeaderArray As Variant)

 

    Dim nColumn As Integer

    

    '--------------------------------------------------

    ' 테이블 초기화 데이터를 해당 전역 변수에 설정한다.

    '--------------------------------------------------

    m_nColumnCount = nColumnCount

    

    ReDim m_dColumnWidthArray(1 To nColumnCount)

    ReDim m_strColumnAlignmentArray(1 To nColumnCount)

    ReDim m_strColumnHeaderArray(1 To nColumnCount)

    

    For nColumn = 1 To nColumnCount

    

        m_dColumnWidthArray(nColumn) = CDbl(pColumnWidthArray(nColumn))

        

        m_strColumnAlignmentArray(nColumn) = CStr(pColumnAlignmentArray(nColumn))

        

        m_strColumnHeaderArray(nColumn) = CStr(pColumnHeaderArray(nColumn))

    

    Next nColumn

    

    '--------------------------------------------------

    ' 테이블 생성 객체를 정의한다.

    '--------------------------------------------------

    Set m_pTableAction = pHwpCtrl.CreateAction("TableCreate")

    

    Set m_pTableParameterSet = m_pTableAction.CreateSet()

    

    m_pTableParameterSet.SetItem "Cols", m_nColumnCount

    m_pTableParameterSet.SetItem "WidthType", 2

    m_pTableParameterSet.SetItem "HeightType", 1

 

    m_pTableParameterSet.CreateItemSet "TableProperties", "Table"

    

    

    Set m_pTableParameterArray = m_pTableParameterSet.CreateItemArray("ColWidth", nColumnCount)

    

    For nColumn = 1 To nColumnCount

        

        m_pTableParameterArray.SetItem nColumn - 1, HWPGetUnit(CDbl(pColumnWidthArray(nColumn)))

    

    Next

 

    '--------------------------------------------------

    ' 텍스트 추가 객체를 정의한다.

    '--------------------------------------------------

    Set m_pTextAction = pHwpCtrl.CreateAction("InsertText")

      

    Set m_pTextParameterSet = m_pTextAction.CreateSet()

 

End Sub

 

'--------------------------------------------------

' 아래 한글 테이블 추가하기

'--------------------------------------------------

' pHwpCtrl      : HwpCtrl OCX

' strTableID    : 테이블 ID

' strValueArray : 값 배열 (※ 2차원 문자열 배열)

' nStartRow     : 테이블에 추가할 값 배열 데이터의 시작 행 인덱스

'                 (1부터 "전체 행 수 - nRowCount + 1"까지 지정 가능)

' nRowCount     : 추가 행 수

'--------------------------------------------------

Public Sub HWPInsertTable(pHwpCtrl As HwpCtrl, strTableID As String, strValueArray() As String, nStartRow As Integer, nRowCount As Integer)

 

    Dim nRow         As Integer

    Dim nColumn      As Integer

    

    '--------------------------------------------------

    ' 추가할 테이블 행 수를 설정한다.

    ' ※ 헤더를 포함해 행 수 + 1을 설정한다.

    '--------------------------------------------------

    m_pTableParameterSet.SetItem "Rows", nRowCount + 1

    

    '--------------------------------------------------

    ' 테이블을 추가한다.

    '--------------------------------------------------

    m_pTableAction.Execute m_pTableParameterSet

    

    pHwpCtrl.SetCurFieldName strTableID, 1, 0, 0

    

    pHwpCtrl.MoveToField strTableID, False, False, False

 

    pHwpCtrl.Run "TableCellBlock"

    

    pHwpCtrl.Run "Cancel"

 

    '--------------------------------------------------

    ' 컬럼 헤더를 설정한다.

    '--------------------------------------------------

    For nColumn = 1 To m_nColumnCount

    

        pHwpCtrl.Run "ParagraphShapeAlignCenter"

        

        m_pTextParameterSet.SetItem "Text", m_strColumnHeaderArray(nColumn)

    

        m_pTextAction.Execute m_pTextParameterSet

    

        pHwpCtrl.Run "TableRightCell"

    

    Next nColumn

        

    '--------------------------------------------------

    ' 셀 데이터를 설정한다.

    '--------------------------------------------------

    For nRow = 1 To nRowCount

    

        For nColumn = 1 To m_nColumnCount

        

            '--------------------------------------------------

            ' 컬럼 정렬 배열 값에 따라 셀 정렬을 설정한다.

            '--------------------------------------------------

            Select Case m_strColumnAlignmentArray(nColumn)

            

                Case "L":

                

                    pHwpCtrl.Run "ParagraphShapeAlignLeft"

                    

                Case "R":

            

                    pHwpCtrl.Run "ParagraphShapeAlignRight"

                    

                Case Else

            

                    pHwpCtrl.Run "ParagraphShapeAlignCenter"

            

            End Select

            

            '--------------------------------------------------

            ' 셀 데이터를 설정한다.

            '--------------------------------------------------

            m_pTextParameterSet.SetItem "Text", strValueArray(nStartRow + nRow - 1, nColumn)

        

            m_pTextAction.Execute m_pTextParameterSet

        

            pHwpCtrl.Run "TableRightCell"

        

        Next nColumn

        

    Next nRow

 

End Sub

 

'--------------------------------------------------

' 아래 한글 리포트 테이블 추가하기

'--------------------------------------------------

' pHwpCtrl           : HwpCtrl OCX

' strValueArray      : 값 배열 (※ 2차원 문자열 배열)

' nFirstPageRowCount : 첫 페이지 행 수

' nPageRowCount      : 페이지 행 수

'--------------------------------------------------

Public Sub HWPInsertReportTable(pHwpCtrl As HwpCtrl, strValueArray() As String, nFirstPageRowCount As Integer, nPageRowCount As Integer)

 

    Dim nTotalRowCount  As Integer

    Dim nTotalPageCount As Integer

    Dim nPage           As Integer

    Dim nStartRow       As Integer

    Dim nRowCount       As Integer

    

    

    nTotalRowCount = UBound(strValueArray, 1)

   

    

    If nTotalRowCount = 0 Then ' 전체 행 수가 0인 경우

    

        HWPInsertTable pHwpCtrl, "TableID1", strValueArray, 1, 0

        

        pHwpCtrl.MovePos 3

    

    ElseIf nFirstPageRowCount > nTotalRowCount Then ' 첫 페이지 행 수가 전체 행 수보다 큰 경우

    

        HWPInsertTable pHwpCtrl, "TableID1", strValueArray, 1, nTotalRowCount

        

        pHwpCtrl.MovePos 3

    

    Else ' 상기 경우가 아닌 경우

    

        nTotalPageCount = Round((nTotalRowCount - nFirstPageRowCount) / nPageRowCount + 0.5, 0) + 1

        

        nStartRow = 1

        

        For nPage = 1 To nTotalPageCount

        

            If nPage = 1 Then

            

                HWPInsertTable pHwpCtrl, "TableID" & nPage, strValueArray, nStartRow, nFirstPageRowCount

                

                nStartRow = nStartRow + nFirstPageRowCount

            

            Else

            

                If nPage = nTotalPageCount Then

                

                    If (nTotalRowCount - nFirstPageRowCount) Mod nPageRowCount = 0 Then

                    

                        HWPInsertTable pHwpCtrl, "TableID" & nPage, strValueArray, nStartRow, nPageRowCount

                        

                    Else

                    

                        HWPInsertTable pHwpCtrl, "TableID" & nPage, strValueArray, nStartRow, (nTotalRowCount - nFirstPageRowCount) Mod nPageRowCount

                    

                    End If

 

                Else

            

                    HWPInsertTable pHwpCtrl, "TableID" & nPage, strValueArray, nStartRow, nPageRowCount

                    

                    nStartRow = nStartRow + nPageRowCount

                

                End If

            

            End If

            

            pHwpCtrl.MovePos 3

        

        Next

    

    End If

 

End Sub

----------------------------------------------------------------------------------------------------

※ HWPGetUnit 함수 : "아래 한글 단위 구하기" 참조

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요