해결된 질문
작성
·
189
답변 1
1
YongJun님 안녕하세요?
말씀해주신 부분은 delete_ctrl 같은 메서드를 사용해보시면 간편할 것 같습니다.
(굳이 누름틀이 아니더라도) 선택 영역 안의 미주를 삭제하는 방법
from pyhwpx import Hwp
hwp = Hwp()
hwp.open("your/file/path")
# 필드로 이동(범위 선택)
hwp.move_to_field("1{{0}}", select=True)
# 선택범위 좌표 추출
sel_range = hwp.get_selected_pos() # (True, 0, 2, 8, 0, 5, 18) 방식 리턴
# 문서 전체 컨트롤 리스트 중 미주
미주리스트 = [i for i in hwp.ctrl_list if i.UserDesc == "미주"]
# 선택범위 안의 미주 삭제
for i in 미주리스트:
if i.GetAnchorPos(0).Item("Para") in range(sel_range[2], sel_range[5]+1):
hwp.delete_ctrl(i)
시연화면
선택영역 안에 여러 개의 미주가 있는 경우라면 역순으로 삭제하시면 됩니다.
다른 조건으로 삭제하는 방법이 궁금하시면 댓글 남겨주세요^^
행복한 하루 되세요!!
ctrl_list는 편의를 위해 내부적으로 만든 프로퍼티입니다.
HeadCtrl부터 LastCtrl까지( 첫 secd와 cold를 제외한)의 리스트를 리턴합니다.
win32의 hwp와 pyhwpx의 hwp는
내부적으로는 같은 클래스를 사용하므로, 혼용하셔도 좋을 듯 합니다.
굳이 비유하자면 matplotlib과 seaborn 같은 관계가 되었으면 좋겠습니다.
위 코드를 win32로 구현하시려면
아래처럼 수정하시면 됩니다.
import win32com.client as win32
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Item(0).Visible = True
hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")
hwp.Open("c:\\users\\Administrator\\desktop\\1234.hwp")
hwp.MoveToField("1{{0}}", select=True)
sel_range = hwp.GetSelectedPos()
en_list = []
ctrl = hwp.HeadCtrl
while ctrl:
if ctrl.UserDesc == "미주":
en_list.append(ctrl)
ctrl = ctrl.Next
# 선택범위(문단) 안의 미주 삭제
for i in en_list:
if i.GetAnchorPos(0).Item("Para") in range(sel_range[2], sel_range[5]+1):
hwp.DeleteCtrl(i)
익숙한 걸 쓰는 게 가장 생산적이지만,
pyhwpx의 Hwp() 클래스도
win32 HWPFrame.HwpObject 의 대부분의 기능을 구현해 두었으므로
사용하시는 데 큰 지장이 없을 것입니다.
다양한 편의함수를 만들고 있으니 사용법을 한 번 찾아보셔도 좋을 것 같습니다.
감사합니다.
행복한 하루 되세요^^
예전에 작성해두신 좋은 글 있어서 하단에 첨부해 두겠습니다^^
https://employeecoding.tistory.com/347
Item을 SetItem으로 수정하면 위의 함수도 사용 가능하였어요 ㅎㅎㅎ
혹시 pyhwpx를 사용한 내용일까요?
ctrl_list 가 pywin32에서는 어떤 역할인지도 궁금하게되네요
미주 리스트에서 오류가 발생하는거 같아요
감사합니다.