해결된 질문
작성
·
722
답변 1
1
국진님, 안녕하세요?^^
말씀하신 기능은 <찾아가기(단축키:Alt-G)> 기능으로 간단히 구현하실 수 있습니다.
다음 제목 차례로 이동하는 파이썬 코드는 아래와 같습니다.
hwp.HAction.GetDefault("Goto", hwp.HParameterSet.HGotoE.HSet)
hwp.HParameterSet.HGotoE.HSet.SetItem("DialogResult", 60)
hwp.HParameterSet.HGotoE.SetSelectionIndex = 5
hwp.HAction.Execute("Goto", hwp.HParameterSet.HGotoE.HSet)
다만 추가로 유의하셔야 할 사항이 세 개 있는데,
while문으로 반복을 돌리시는 경우, 마지막 제목차례에서 실행시 "처음 제목차례로 이동할까요?"라는 팝업이 뜹니다. 이에 대비하기 위해 hwp.SetMessageBoxMode를 이용해 팝업을 처리해주셔야 합니다.
위 방법만 적용하여 코딩하면 제목 차례 찾기가 무한정 실행되어버립니다. 이를 중단하는 방법 중 제가 주로 사용하는 방법은 찾아가기를 함수로 만든 후, hwp.HAction.Execute 라인 앞에 return을 추가하는 것입니다. 그러면 마지막 제목차례에서 실행시 False를 리턴하므로 while문의 조건으로도 적당합니다.
위 찾아가기 명령은 다음 제목차례 앞으로만 이동합니다. 때문에 동일 코드를 여러 번 반복실행해도 다음 제목차례로 넘어가지 않습니다. 캐럿을 우측이나 라인/문단 끝으로 옮기는 코드를 추가로 넣어주셔야 합니다.
위 유의사항을 토대로 제가 짜본 코드는 아래와 같습니다.
import os
import win32com.client as win32
def 한글_시작():
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Item(0).Visible = True
hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")
return hwp
def 다음제목차례로_이동():
hwp.Run("MoveLineEnd")
hwp.HAction.GetDefault("Goto", hwp.HParameterSet.HGotoE.HSet)
hwp.HParameterSet.HGotoE.HSet.SetItem("DialogResult", 60)
hwp.HParameterSet.HGotoE.SetSelectionIndex = 5
return hwp.HAction.Execute("Goto", hwp.HParameterSet.HGotoE.HSet)
def 제목차례영역_추출():
total_blocks = []
this_block = []
hwp.Run("MoveDocBegin")
hwp.SetMessageBoxMode(0x22222)
while 다음제목차례로_이동():
if len(this_block) == 1:
this_block.append(hwp.GetPos())
total_blocks.append(this_block)
this_block = []
hwp.Run("MoveRight") # [제목 차례]는 빼고
this_block.append(hwp.GetPos())
hwp.SetMessageBoxMode(0xfffff)
hwp.Run("MoveDocEnd")
this_block.append(hwp.GetPos())
total_blocks.append(this_block)
return total_blocks
def 현재라인추출():
hwp.InitScan(Range=0x22)
_, text = hwp.GetText()
hwp.ReleaseScan()
return text
def 블록저장(filename):
hwp.HAction.GetDefault("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet)
hwp.HParameterSet.HFileOpenSave.filename = os.path.join(os.path.dirname(hwp.Path), filename+".hwp")
hwp.HParameterSet.HFileOpenSave.Format = "HWP"
hwp.HParameterSet.HFileOpenSave.Attributes = 1
hwp.HAction.Execute("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet)
if __name__ == '__main__':
hwp = 한글_시작()
hwp.Run("FileOpen")
제목차례블록_리스트 = 제목차례영역_추출()
for 블록 in 제목차례블록_리스트:
hwp.Run("Cancel")
hwp.SetPos(*블록[0])
제목 = 현재라인추출().strip()
hwp.Run("Select")
hwp.SetPos(*블록[1])
블록저장(제목)
hwp.Run("Cancel")
위 코드를 실행한 결과는 아래와 같습니다.
결과가 국진님의 의도와 다를 수 있는데,
추가질문 남겨주시면 상세히 설명드리겠습니다.
감사합니다.
행복한 하루 되세요!^^