'행번호와 열번호를 각각 얻는다. (정규식을 이용)
Dim myRegex1 As New Regex("[A-Z]") 'Col
Dim myRegex2 As New Regex("[0-9]") 'Row
'찾아가기용 변수
Dim myActGoto As HAction = myHwp.HAction
Dim myHGotoE As HGotoE = myHwp.HParameterSet.HGotoE
Dim myHSet As HSet = myHGotoE.HSet
myActGoto.GetDefault("Goto", myHSet)
myHSet.SetItem("DialogResult", 55) '표 찾아가기
myHGotoE.SetSelectionIndex = 5
Dim myPos As IDHwpParameterSet
Dim myCurrentCellList As Short '셀을 옮겨 다니면서 현재 셀의 리스트를 저장한다.
'기타 필요한 변수
Dim myR As New List(Of String) '행
Dim myC As New List(Of String) '열
Dim myR2 As New List(Of String) '행 (중복제거)
Dim myC2 As New List(Of String) '열 (중복제거)
Dim rMax As String, cMax As String
Dim str As String
Dim ctr As String = "" 'KeyIndicator의 매개변수, 셀의 주소 정보를 위한 변수
myHwp.SetMessageBoxMode(&H20000) '캐럿 이후에 표가 없으면 문서 처음부터 찾을까요? 메시지 박스가 뜬다. 메시지 박스 차단용
myPos = myHwp.GetPosBySet() '현재 캐럿의 위치 정보
Select Case myPos.Item("List")
Case 0 '캐럿이 본문에 있으면 캐럿 이후 첫번째 표가 대상임
myActGoto.Execute("Goto", myHSet)
Case Else '캐럿이 표의 셀에 있으면 해당 표가 대상임
myHwp.Run("CloseEx")
End Select
myHwp.Run("MoveRight") '표 안으로 들어감.
myHwp.Run("TableCellBlock") '셀 블럭 선택
'각 셀을 돌면서 셀의 주소와 필요한 정보를 얻는다.
Do
myPos = myHwp.GetPosBySet()
myCurrentCellList = myPos.Item("List")
myHwp.KeyIndicator(Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ctr)
str = Mid(ctr, 2, InStr(ctr, ")") - 2)
myC.Add(myRegex2.Replace(str, "")) '행렬에서 숫자를 지우면 문자(열↓)만 남는다. A1, B1, C1, ...에서 A, B, C, ... 에 해당한다.
myR.Add(myRegex1.Replace(str, "")) '행렬에서 문자를 지우면 숫자(행→)만 남는다. A1, A2, A3, ...에서 1, 2, 3, ... 에 해당한다.
myHwp.Run("TableRightCell")
myPos = myHwp.GetPosBySet()
If myCurrentCellList = myPos.Item("List") Then
myHwp.Run("CloseEx")
Exit Do
End If
Loop
myR2 = myR.Distinct.ToList
myC2 = myC.Distinct.ToList
rMax = myR2.Max
cMax = (Asc(myC2.Max) - 64).ToString
MsgBox("이 표는 " + rMax + "행 " + cMax + "열 입니다.")
표를 XML 형식으로 블록 저장하여 XML 파일의 정보를 이용하는 방법
'찾아가기용 변수
Dim myActGoto As HAction = myHwp.HAction
Dim myHGotoE As HGotoE = myHwp.HParameterSet.HGotoE
Dim myHSet As HSet = myHGotoE.HSet
myHSet.SetItem("DialogResult", 55) '표 찾아가기
myHGotoE.SetSelectionIndex = 5
'캐럿 위치 변수
Dim myPos As IDHwpParameterSet
'블록 저장용 변수
Dim myActFileSave As HAction = myHwp.HAction
Dim myHFileOpenSave As HFileOpenSave = myHwp.HParameterSet.HFileOpenSave
Dim myHFileOpenSaveHSet As HSet = myHFileOpenSave.HSet
'XML 관련 변수
Dim myXML As New XmlDocument
Dim myNodeList As XmlNodeList
Dim myXMLName As String
'기타 필요한 변수
Dim myR As New List(Of String)
Dim myC As New List(Of String)
'블록 저장 할 임시 폴더 생성
If Not Directory.Exists("C:\HwpTableTemp") Then Directory.CreateDirectory("C:\HwpTableTemp")
myHwp.SetMessageBoxMode(&H20000) '캐럿 이후에 표가 없으면 문서 처음부터 찾을까요? 메시지 박스가 뜬다. 메시지 박스 차단용
myPos = myHwp.GetPosBySet() '현재 캐럿의 위치 정보
Select Case myPos.Item("List")
Case 0 '캐럿이 본문에 있으면 캐럿 이후의 첫번째 표로 간다.
myActGoto.Execute("Goto", myHSet)
Case Else '캐럿이 표 안에 있으면 Shift + ESC를 눌러 표를 빠져나온다.
myHwp.Run("CloseEx")
End Select
'표 블록 선택
myHwp.Run("MoveSelParaEnd")
'표를 블럭 선택 후 XML로 저장
myXMLName = "C:\HwpTableTemp\tmp" & DateTime.Now.ToString(" yyMMdd HHmmssff") & ".xml"
With myHFileOpenSave
.filename = myXMLName
.Format = "XML"
.Attributes = 1
End With
myActFileSave.Execute("FileSaveBlock_S", myHFileOpenSaveHSet)
myHwp.Run("MoveLineBegin")
myXML.Load(myXMLName)
myNodeList = myXML.GetElementsByTagName("CELL")
For Each myNode As XmlNode In myNodeList
myC.Add(CInt(myNode.Attributes("ColAddr").Value))
myR.Add(myNode.Attributes("RowAddr").Value)
Next
'XML 파일을 저장했던 임시 폴더 삭제.
If Directory.Exists("C:\HwpTableTemp") Then Directory.Delete("C:\HwpTableTemp", True)
MsgBox("이 표는 " + (CInt(myR.Max) + 1).ToString + "행 " + (CInt(myC.Max) + 1).ToString + "열 입니다.")