첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

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

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 함수 : "아래 한글 단위 구하기" 참조

728x90
반응형
그리드형(광고전용)
Posted by icodebroker
TAG ,

댓글을 달아 주세요