해결된 질문
작성
·
621
답변 3
1
1
제가 오해의 소지가 있게 말씀 드린 것 같습니다 ㅠ
제가 여쭈고 싶은 내용은 본문 내용 어느 부분의 위치에서 바로 전 미주를 찾고 싶은 거였습니다.
그러니 예를 들어
1번 미주 2번 미주 (커서위치) 3번미주
이런 모양으로 있을 때 2번 미주위치로 이동하고 싶습니다.
1
민수님 안녕하세요?^^
문서의 마지막 미주로 이동하는 코드는 아래와 같습니다.
def 마지막_미주로_이동():
ctrl = hwp.LastCtrl # 마지막 컨트롤에서부터
while ctrl:
if ctrl.UserDesc == "미주": # 마지막 미주 찾기
hwp.SetPosBySet(ctrl.GetAnchorPos(0)) # 해당미주로 이동
break # 반복 종료
ctrl = ctrl.Prev # 미주가 아니면? 이전 컨트롤 탐색!
마지막_미주로_이동()
미주의 주석으로 이동하는 코드는 간단합니다.
hwp.HAction.Run("NoteModify") # 미주의 노트로 이동
미주 노트 안에서 이전 노트로 이동하는 액션은 간단히
hwp.HAction.Run("NoteToPrev")
을 사용하시면 됩니다. (단, 각주와 미주를 구분하지는 않습니다.)
미주노트를 (번호를 제외하고) 추출하는 방법으로는 GetText가 대표적인데,
hwp.HAction.Run("SelectAll") # 미주노트 전체선택
hwp.InitScan(option=0, Range=0xff) # 선택범위로 탐색한정
_, text = hwp.GetText() # 선택범위 텍스트 추출
hwp.ReleaseScan() # 탐색 종료
print(text)
방식으로 추출하실 수 있습니다.
만약 각주는 제외하고 미주만 역순으로 추출해야 하는 경우라면
제일 먼저 보여드린 마지막_미주로_이동() 함수를 활용해서
미주마다 반복해서 노트로 이동하고 추출하시면 됩니다.
도움이 되었으면 좋겠습니다.
언제든 추가질문 남겨주세요ㅎ
<팁>
문서 내의 모든 미주만 별도의 문서로 추출하는 API도 최근 추가되었습니다.
사용방법은 아래와 같습니다.
def save_footnote(filepath):
pset = hwp.HParameterSet.HSaveFootnote
hwp.HAction.GetDefault("SaveFootnote", pset.HSet)
pset.filename = filepath
return hwp.HAction.Execute("SaveFootnote", pset.HSet)
save_footnote("C:\\Users\\User\\Desktop\\footnote.hwpx")
민수님 안녕하세요ㅎ
제가 질문을 오해했네요.
간단히는 hwp.FindCtrl()을 실행하시면 캐럿이 이전 컨트롤로 찾아가므로,
미주 외에 다른 컨트롤이 없다면, hwp.FindCtrl()도 적절한 대안일 수 있습니다.
좀 더 복잡한 문서(표나 각주 등 기타 컨트롤이 삽입되어 있는 경우)에는
아래 함수를 사용해 보셔도 좋을 것 같습니다.
제가 내공이 후달려 예쁘게 코드를 작성하지는 못했지만,
주석을 달아 두었으니 참고하시기 바랍니다.
시연화면은 아래와 같습니다.
도움이 되었기를 바랍니다ㅎ