본문 바로가기
아래아한글 자동화/python+hwp 중급

[QnA] while문으로 #번째 그림을 삭제하는 방법

by 일코 2022. 8. 31.
안녕하세요 화사원코딩님..! 파이썬 한/글에 대해서는 거의 국내.. 유일하신 듯 합니다. 덕분에 많이 공부하고 있습니다. 감사합니다. 오늘 방명록 남긴건 다름이 아니라 한/글 파일 중에서도 그림을 특정해서 지우고 싶은데 그 방법을 모르겠어서 입니다. ㅠ
HeadCtrl 사용해서 while문 돌려서 순차적으로 찾는 건 되는데, 파일이 300페이지 이상에, 그림도 너무 많아서 while문 사용해서 특정하는 건 너무 비효율 + 어려울 것 같구, 저는 그림을 "특정"하고 싶거든요..? 누름틀을 사용해서 누름틀 아이디를 먼저 부여한 다음에 거기다가 그림을 얹어놓고 그 부분에 있는 그림만 삭제하고 새로운 그림을 넣고 싶습니다. 그래서 MoveToFiled하고 FindCtrl하고 DeleteCtrl(Delete도 해보고 hwp.run("Delete")도 해봄)했는데 결과는 그림객체가 선택만 되어있고 삭제는 안되더라고요.. 그림만 또는 ctrl 객체만 특정해서 표적으로 삭제하거나 수정하는 방법은 없을까요..? 6시간 동안 삽질하다가 도저히 안되겠어서 이렇게 방명록에 직접 남기게 되었네요. (웃픔)

while문과 Ctrl을 사용해서 #번째 그림을 삭제하는 코드를 소개합니다.

우선 전체 코드를 먼저 보여드리겠습니다.

 

# import win32com.client as win32
# 
# hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
# hwp.XHwpWindows.Item(0).Visible = True
# hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")
# 
# hwp.Open(r"C:\Users\smj02\Desktop\그림삭제.hwp")

# 앞에서 4번째 삽입된 그림을 삭제하고 싶다면?

count = 0  # 몇 번째 그림인지 세기 위해 변수 지정
ctrl = hwp.HeadCtrl  # 첫 번째 컨트롤(secd)
while True:  # 반복
    if ctrl.CtrlID == "gso":  # 현재 선택된 컨트롤이 "그림" 개체라면?
        count += 1  # 카운트에 하나를 더함
        if count == 4:  # 카운트가 4가 되었으면?
            hwp.DeleteCtrl(ctrl)  # 해당 컨트롤을 삭제
            break  # while문 종료
        else:  # 카운트가 4가 되지 않은 경우
            ctrl = ctrl.Next  # 다음 컨트롤로 넘어감
    else:  # 선택된 컨트롤이 그림 개체가 아니라면?
        ctrl = ctrl.Next  # 다음 컨트롤로 넘어감

이해를 돕기 위해 주석을 나름 달아보았는데, 코드가 다소 너저분해 보이네요. 상당히 간단한 코드입니다.

아래 영상처럼 실행됩니다.

 

도움이 되었길 바랍니다.

행복한 하루 되세요!

댓글