본문 바로가기
VBA/VBA + 아래아한글 자동화

[한글 자동화] 자간 맞추기 + 줄바꿈

by 일등미노왕국 2023. 9. 2.

우선 본인이 궁금하였던것은 이것이다. 한글의 텍스트를 실시간으로 읽어올수 있느냐이다.

물론 된다.. 근데 고생 좀 했다.

 

한글 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

어려워하지 말고

여기에 나와있는 함수들이 이질감이 드는게 당연하다. 그래서 함수의 이름을 최대한 직관적으로 만들고 있으니, 하나하나 사용해보면서 익히길 바란다.

자간바꾸기.zip
0.25MB

댓글