ctrl로 모든 표가 아닌, 지정된 표만 삭제하는 기능

안녕하세요.
문서에서 ctrl을 이용하여 지정된 표(특정 글자가 포함된)만 삭제하려고 합니다.
즉 전체 1,2,3번의 표가 있으면, 2번만 지우려고 합니다.
아래 방식으로 하니 모든 표가 삭제됩니다.

hwp.HAction.GetDefault(“DeleteCtrls”, hwp.HParameterSet.HDeleteCtrls.HSet)
hwp.HParameterSet.HDeleteCtrls.CreateItemArray(“DeleteCtrlType”, 1)
hwp.HParameterSet.HDeleteCtrls.DeleteCtrlType.SetItem(0, 55) #55번, 표
hwp.HAction.Execute(“DeleteCtrls”, hwp.HParameterSet.HDeleteCtrls.HSet)

특정 표만 지우는 방법을 알 수 있을까요?

안녕하세요.

삭제하고자 하는 표를 특정할 수 있는 조건이 있어야 원하는 동작을 구현할 수 있을 것 같습니다.
문의대로 문서 내의 “인덱스” 조건으로만 표를 찾아 삭제한다면 아래와 같이 구현하실 수 있습니다.

(C++)

CDHwpCtrlCode ctrl = (CDHwpCtrlCode)m_app.get_HeadCtrl();
int tblIdx = 0;

while (ctrl != NULL) {
    if (ctrl.get_CtrlID() == _T("tbl")) {
        // 0 베이스로 2번째 표의 인덱스를 계산함
        if (tblIdx == 1) {
            m_app.DeleteCtrl(ctrl);
            break;
        }
        tblIdx++;
    }
    ctrl = ctrl.get_Next();
}

감사합니다.

아 새로운 기능 추가하게해주셔서 감사합니다 :slight_smile:
python 사용하고 계시다면

ctrl = hwp.HeadCtrl
table_dict = {}
index = 1

while ctrl:
if ctrl.UserDesc == ‘표’:
table_dict[index] = ctrl.GetAnchorPos(0)
# print(f"Table {index}: Position {ctrl.GetAnchorPos(0)}")
index += 1
ctrl = ctrl.Next

selected_pos = table_dict.get(1)
if selected_pos:
hwp.SetPosBySet(selected_pos)
hwp.FindCtrl()
hwp.HAction.Run(“Delete”)

이 코드 한번 써보세요 ㅎㅎ
selected_pos = table_dict.get() 쪽 괄호에 지우고싶은 표 번호를 적으시면 됩니다.

1개의 좋아요