카테고리 없음

[Python, 한글] 파이썬을 이용하여 한글문서 작성하기 [기초편] - 1

대장코린이 2024. 3. 7. 16:23

안녕하세요, 대장코린이입니다.

 

제가 최근에 아주 유용하게 사용했던 기능에 대해 한번 소개하려하는데요.

파이썬을 이용하여 한글 문서 작성하기에 대해 알아볼게요.

 

업무중 여러개의 한글 보고서를 검토하고 작성해야 하는 일이 있었는데요.

보고서 하나에 200 페이지가 넘는 ㅜㅜ 그런 보고서가 18개가 있었어요.

 

도저히 손과 눈으로는 안될 것 같아서 파이썬을 이용하여 문서 자동화로 해결하였습니다.

 


0. 라이브러리 설치

 

사용한 라이브러리는 win32com.client를 사용했어요

 

설치 방법은 아래와 같이 pip를 이용하여 설치해줍니다~

pip install pywin32

 

 


1. 한글파일 열기

 

파이썬으로 한글문서를 다룰려면 먼저 파이썬으로 한글문서를 열줄 알아야겠죠?

    hwp = win32.gencache.EnsureDispatch('hwpframe.hwpobject')
    
    hwp_path = rf'./test.hwp'
    
    hwp.Open(hwp_path,Format='HWP',arg='')
    hwp.XHwpWindows.Item(0).Visible=True

 

이렇게 실행해주면 한글파일이 열리는 것을 볼 수 있을 것입니다.


2. ctrl과 커서

한글파일을 다루기 위해서는 먼저 어떻게 동작되는지를 알아야합니다.

일반적으로 사람이 한글 문서를 수정할 때는, 마우스 클릭으로 내가 수정하고 싶은 부분으로 이동합니다.

하지만 파이썬 상에서는 1페이지의 1줄부터 한칸씩 옮겨가며 이동해야겠지요

그리고 그 위치가 내가 원하는 위치여야하고요.

 

그 한칸씩 옮겨가는 위치를 ctrl이라고 저는 부릅니다.

hwp.HAction.Run('MoveTopLevelBegin') #1페이지 1줄로 이동
 
ctrl = hwp.HeadCtrl #ctrl 객체 생성
while ctrl != None:  # 문서의 끝으로 이동하면 ctrl은 None을 반환합니다.
    ctrl = ctrl.Next # 다음칸으로 ctrl 이동
    
    if ctrl.CtrlID == 'tbl':   # 찾은 부분이 표
        stop

 

간단하게 맨 위부터 시작해서 한칸씩 옮겨가며 표를 찾는 코드를 작성해보았습니다.

ctr.CtrlID를 통해 내가 찾은 부분의 유형을 알 수 있는데 ,이걸 이용해서 표를 찾는 방법입니다.

 

cold
secd 구역
tbl
gso 그리기 개체
eqed 수식
atno 번호 넣기
%clk 누름틀
%hlk 하이퍼링크

 

주로 쓰이는 ctrl ID들에 대해 가져와보았는데요

이건 한글과 컴퓨터에서 제공하는 HwpCtrl API 문서에서 골라왔습니다.

 

여기서 중요한 것이 있습니다. 이건 반드시 기억해야해요

우리가 문서를 작업할때, 마우스를 클릭을 하면 커서가 깜빡깜빡거리죠.

이 커서와 ctrl은 같지 않습니다.

따라서 우리가 찾은 ctrl의 위치로 커서의 위치를 옮겨주어야합니다!

 

pos = ctrl.GetAnchorPos(0)
pos = pos.Item('List'), pos.Item('Para'), pos.Item('Pos')
hwp.SetPos(*pos)

 

해당 코드를 넣으면, 이제 우리가 찾았던 ctrl로 커서가 옮겨가게 됩니다.

일단 오늘은 여기까지하고, 다음에는 본격적으로 표 혹은 그림을 선택하여 다루는 방법을 소개해드리겠습니다.

 

본인이 보고서를 자주 다뤄야 하는 직업이라면, 반드시 알아둬야 하는 기능이라고 생각해요.

저는 정말... 이걸로 덕을 많이 봤습니다.

 

마지막으로 한글과컴퓨터에서 제공하는 HwpCtrl API 문서도 같이 올려드릴게요.

아직은 이 문서가 뭘 의미하는지, 복잡하기만하고 모르실 수 있습니다. 저도 그렇고요

하지만 나중엔 유용하게 사용하실 수 있을거에요!

 

Action Table.hwp
0.18MB
HwpCtrl API.hwp
0.48MB
ParameterSet Table.hwp
0.22MB

 

 

 

이상 대장코린이였습니다.

도움이 되었으면 좋겠어요. 안녕~