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

문서 중 특정 컨트롤을 모두 삭제하는 아주 간단한 코드

by 일코 2022. 12. 5.

문서 안에서 쪽번호 위치나 새쪽번호, 감추기 같은 조판부호들은 일일이 찾기도 쉽지 않을뿐더러

본문이 긴 경우에는 페이지 밖으로 사라져 있기도 합니다.

문서가 긴 경우에는 이런 컨트롤들을 일일이 찾아서 삭제하는 것도 정말 시간을 많이 잡아먹는 일입니다.

 

다행히 한/글에서는 특정 조판부호를 모두 삭제하는 기능을 제공하고 있습니다.

아래 움짤은 문서 내 모든 고정폭빈칸 컨트롤을 삭제하는 예시입니다.

클릭 몇 번에 고정폭 빈칸이 모두 삭제되었습니다.

다행히 이 코드는 매크로 녹화가 되어서, 파이썬 코드로도 쉽게 고칠 수 있습니다.

녹화한 스크립트매크로는 아래와 같습니다.

HAction.GetDefault("DeleteCtrls", HParameterSet.HDeleteCtrls.HSet);
with (HParameterSet.HDeleteCtrls)
{
    CreateItemArray("DeleteCtrlType", 1);
    DeleteCtrlType.Item(0) = 7;
}
HAction.Execute("DeleteCtrls", HParameterSet.HDeleteCtrls.HSet);

 

파이썬 코드로 고치면 아래와 같습니다.

다 비슷한데, 아이템배열에 값을 지정할 때에는 .Item(0) = 7 대신에 .SetItem(0, 7) 방식으로 대입해야 합니다.

hwp.HAction.GetDefault("DeleteCtrls", hwp.HParameterSet.HDeleteCtrls.HSet)
hwp.HParameterSet.HDeleteCtrls.CreateItemArray("DeleteCtrlType", 1)
hwp.HParameterSet.HDeleteCtrls.DeleteCtrlType.SetItem(0, 7)  # <--- Item을 SetItem으로 고쳤음.
hwp.HAction.Execute("DeleteCtrls", hwp.HParameterSet.HDeleteCtrls.HSet)

 

위 코드를 실행해보면

 

여러 종류의 컨트롤을 한 번에 삭제하는 것도 가능합니다.

아래 코드는 강제줄나눔(Shift-Enter) 및 강제쪽나눔(Ctrl-Enter) 조판부호를 모두 삭제하는 코드입니다.

위의 한 종류 조판부호를 지우는 코드와 비교해서 어떤 부분이 변경되는지 유심히 살펴보시기 바랍니다.

hwp.HAction.GetDefault("DeleteCtrls", hwp.HParameterSet.HDeleteCtrls.HSet)
hwp.HParameterSet.HDeleteCtrls.CreateItemArray("DeleteCtrlType", 2)
hwp.HParameterSet.HDeleteCtrls.DeleteCtrlType.SetItem(0, 5)
hwp.HParameterSet.HDeleteCtrls.DeleteCtrlType.SetItem(1, 54)
hwp.HAction.Execute("DeleteCtrls", hwp.HParameterSet.HDeleteCtrls.HSet)

CreateItemArray 메서드를 통해 삭제할 컨트롤의 갯수를 지정할 수 있고

SetItem(배열인덱스, 컨트롤번호)를 통해 각각의 배열에다 삭제할 컨트롤 번호를 넣으면 됩니다.

 

실행화면은 아래와 같습니다.

의도한 대로 강제줄나눔과 강제쪽나눔 조판부호가 모두 삭제되었습니다.

 

아래는 일괄삭제 가능한 모든 조판부호의 인덱스입니다.

작업시 참고하시기 바랍니다.

더보기

인덱스 / 컨트롤
2  OLE 개체
3  각주
4  각주 번호
5  강제 줄 나눔
6  개요 문단
7  고정폭 빈 칸
8  구역 시작
9  그리기
10 그림
11 그림 번호
12 글상자
13 글자 겹치기
14 꼬리말
15 현재 날짜
16 만든 날짜
17 누름틀
19 덧말
20 문서 요약
21 사용자 정보
22 파일 경로
23 계산식
24 감추기
25 메모
26 머리말
27 메일 머지
28 묶음 빈 칸
31 미주
32 미주 번호
33 바탕쪽
34 문단 번호 모양
35 삽입 그림
36 연결된 그림
37 수식
38 수식 번호
39 숨은 설명
40 새 각주 번호
41 새 그림 번호
42 새 단 정의
43 새 미주 번호
44 새 수식 번호
45 새 쪽 번호
46 새 표 번호
47 쪽 번호
48 전체 쪽수
49 쪽 번호 위치
50 상호 참조
51 색인
52 책갈피
53 탭
54 강제 쪽 나눔
55 표
56 표번호
58 하이퍼링크
59 홀수 쪽 시작
60 제목 차례
61 차례 숨김
62 글맵시
63 교정 부호
64 교정 부호:띄움표
65 교정 부호:뺌표
66 교정 부호:넣음표
67 교정 부호:부호 넣음표
68 교정 부호:줄 바꿈표
69 교정 부호:비움표
70 교정 부호:붙임표
71 교정 부호:줄 이음표
72 교정 부호:줄 서로 바꿈표
73 교정 부호:고침표
74 교정 부호:메모 고침표
75 교정 부호:지움표
76 교정 부호:붙임표
77 교정 부호:톱니표
78 교정 부호:생각표
79 교정 부호:칭찬표
80 교정 부호:줄표
81 교정 부호:오른자리 옮기표
82 교정 부호:왼 자리 옮기표
83 교정 부호:자리 바꿈표
86 개체 연결선
87 개인 정보
88 양식 개체
89 차트
90 동영상
91 인용
92 참고문헌
93 차례

 

마치며

DeleteCtrls 메서드는 비교적 최근에 API 문서에서 발견했는데요.

이걸 사용하기 전에는 컨트롤 탐색 방법을 통해서(while ctrl:)

일일이 찾아다니며 컨트롤 종류를 확인하고 삭제해주는 방식으로(if ctrl.UserDesc == "누름틀":) 코드를 짰거든요.

지금 와서 보니까 그 복잡하고 오래 걸리던 while문, for문 코드들이 부끄러운 마음이 들기도 합니다.

특히 자동화작업을 마치고 누름틀을 전부 삭제하는 코드라든지,

여러 문서 병합 후에 쪽번호, 새 번호로 시작 등의 컨트롤을 일일이 삭제해줘야 하는 작업은

탐색방식으로 짜면 시간도 제법 걸리고, 코드도 미지근해지는 느낌입니다. 쿨하지 않고요.

여러분들의 자동화 업무에도 DeleteCtrls 액션을 많이 활용해주시기를 바라겠습니다.

 

감사합니다.

행복한 하루 되세요!

댓글