우선 본인이 궁금하였던것은 이것이다. 한글의 텍스트를 실시간으로 읽어올수 있느냐이다.
물론 된다.. 근데 고생 좀 했다.
한글 API에 gettext메소드가 있어서 VBA기준으로 변경하여 적용하여 함수화 하였다.
이글을 읽는 분들은 그냥 사용된 함수를 사용하시면 된다. 굳이 원리에 대해서는 알 필요가 없다..
(근데 본인은 궁금해 ㅋㅋㅋ)
코드 진행은 이렇다...
한글에는 줄나눔기준이 글자와 어절이 있는데 어절을 통해서 줄나눔을 하면 조금더 보기편하고 읽기가 쉬워진다.
한글상 단축키는 alt + t 이다. (설마 저걸 alt 키 / 더하기 키 / t 키를 누르는 분은 없겠지....)
코드로는
hwp.breaknonlatinword '= 한글 어절 단위로 자간 정리
함수로는 이렇게 진행이 된다.
Function breaknonlatinword()
HAction.Run ("SelectAll")
r = HAction.GetDefault("ParagraphShape", HParameterSet.HParaShape.HSet)
With HParameterSet.HParaShape
.breaknonlatinword = 0
End With
r = HAction.Execute("ParagraphShape", HParameterSet.HParaShape.HSet)
End Function
어지러우면 그냥 본인 계속 업데이트 하는 함수를 가지고 사용하면 된다.
그 다음으로 필요한것이 단어들을 순환하면서 [1. / 2. ] 이런 형태가 아닌 [다. / 자.] 형태의 한글과 마침표 조합을 찾아서 줄바꿈을 해줘야 하는데 문장속 마침표와 문단의 마지막 마침표는 다르기 때문에 그것을 구분하여 줄바꿈을 해줘야 한다.
Function GetText()
Dim i As Integer
Dim t As HwpText
r = hwp.InitScan(7, Val(&HFF), 1, 1, 1, 1)
t.rlt = hwp.GetText(t.text)
hwp.ReleaseScan
GetText = t.text
End Function
GetText도 함수화 시켰는데 굳이 이것까지 궁금해하지말고 물 흐르듯이 찾아서 사용하길 바란다.
여기서 중요한 팁이 있다.
문장내에서 마침표가 있는 단어는 공백이 포함되는 반면 문단의 마지막 마침표에는 공백이 포함되지 않는다.
확인하는 방법은 문장내에서 단어에 f3키를 2번 눌러보면 알게된다.
두개의 차이가 느껴지는가??
If Not IsNumeric(left(str, 1)) And Len(selWord) <> Len(str) Then
'= 마침표의 왼쪽이 숫자가 아니면 + 공백제거 문자와 그렇지
'= 않은 것의 크기가 다르다면 / 즉 문장의 마지막이 아니라면
selectCancel '= 블럭을 해제
hwp.Enter '= 엔터로 문장을 나눠라
Run "MoveSelNextWord" '= 블럭처리하여 다음 단어를 찾아라
End If
따라서 이코드를 진행하면
숫자뒤의 마침표가 아니면서 문단의 마지막 마침표가 아닌 문장의 마지막에서 엔터를 치는 코드가 진행되게 된다.
Sub Break_Non_Latin_Word()
Dim text$
Dim str, selWord
Dim cnt&
Dim texts() As HwpText
hwp.NewDocument '= 한글 새문서
OpenHwpFileDialog '= 한글 파일 대화창
hwp.breaknonlatinword '= 한글 어절 단위로 자간 정리
hwp.MoveDocStart '= 한글 문서의 처음 위치
Do
Run "MoveSelNextWord" '= 블럭단위로 단어를 움직여라
text = hwp.GetText '= 블럭처리된 단어의 텍스트를 가져와라
selWord = text '= 블럭 처리된 단어
str = Trim(text) '= 블럭 처리된 단어중 마지막 띄어쓰기 제거 단어
If str = "" Then '= 무한 루프를 탈출하기 위해 단어가 없으면
cnt = cnt + 1 '= 카운트 숫자를 증가시켜라
Else '= 단어가 있다면
cnt = 0 '= 카운트 숫자를 종료해라
End If
If cnt > 10 Then Exit Do '= 단어가 없는 게 10개 이상이면 루프를 탈출해라
If InStr(str, ".") > 0 Then '= 마침표가 단어에 포함되어 있으면
If Not IsNumeric(left(str, 1)) And Len(selWord) <> Len(str) Then
'= 마침표의 왼쪽이 숫자가 아니면 + 공백제거 문자와 그렇지
'= 않은 것의 크기가 다르다면 / 즉 문장의 마지막이 아니라면
selectCancel '= 블럭을 해제
hwp.Enter '= 엔터로 문장을 나눠라
Run "MoveSelNextWord" '= 블럭처리하여 다음 단어를 찾아라
End If
End If
selectCancel '= 블럭해제
DoEvents
Loop
End Sub
어려워하지 말고
여기에 나와있는 함수들이 이질감이 드는게 당연하다. 그래서 함수의 이름을 최대한 직관적으로 만들고 있으니, 하나하나 사용해보면서 익히길 바란다.
'VBA > VBA + 아래아한글 자동화' 카테고리의 다른 글
[한글자동화] 아래아 한글 표 제어하기 #2 (0) | 2023.09.17 |
---|---|
[한글자동화] 아래아 한글 표 제어하기 (0) | 2023.09.07 |
[한글자동화] 엑셀 문단을 한글표에 정리하기 (0) | 2023.09.07 |
[한글자동화] 텍스트 색상변경 (0) | 2023.09.04 |
[한글 자동화] 업무연락처 자동화 (0) | 2023.08.31 |
댓글