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

[파이썬-아래아한글] API매뉴얼과 스크립트매크로가 다르다?

by 회사원코딩 2020. 7. 29.

안녕하세요?

회사원코딩의 신명진입니다. 이번 포스팅은,

스크립트매크로와 API매뉴얼 코드의 차이에 대해서 한 번 보여드리려고 합니다.

어떤 간단한 예제를 들어볼까 하다가,

쪽번호 감추기를 골라보았습니다.

아래는 스크립트매크로 녹화(Shift-Alt-H)를 이용한 "쪽번호 감추기" 기능입니다.

function OnScriptMacro_script5()
{
	HAction.GetDefault("PageHiding", HParameterSet.HPageHiding.HSet);
	with (HParameterSet.HPageHiding)
	{
		Fields = Hiding("PageNumPos");
	}
	HAction.Execute("PageHiding", HParameterSet.HPageHiding.HSet);
}

 

 코드가 길지는 않네요. 어떤 기능을 하는지는 바로(까지는 아니더라도) 이해하실 수 있겠죠?

그리고 아래는 스크립트매크로를 파이썬 문법에 맞게 옮긴 코드입니다.

import win32com.client as win32  # win32com 모듈 임포트
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")  # 한/글 열기
hwp.XHwpWindows.Item(0).Visible = True  # 숨김해제

hwp.HAction.GetDefault("PageHiding", hwp.HParameterSet.HPageHiding.HSet)  # 메서드 초기화
hwp.HParameterSet.HPageHiding.Fields = hwp.Hiding("PageNumPos")  # 인자값 입력 (==32)
hwp.HAction.Execute("PageHiding", hwp.HParameterSet.HPageHiding.HSet)  # 메서드 실행

 

이전 예제와 같이, 임포트 구문과 인스턴스명인 hwp가 각 구문 앞에 붙은 것 말고는 큰 차이가 없습니다.

그리고 아래 코드는 API 매뉴얼과 파라미터셋을 참고해서 작성한 코드입니다.

위의 코드와 한 번 비교해 보세요.

# import win32com.client as win32  # 모듈 임포트
# hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")  # 한/글 실행
# hwp.XHwpWindows.Item(0).Visible = True  # 숨김해제

act = hwp.CreateAction("PageHiding")  # 메서드 초기화
set = act.CreateSet()  # 파라미터셋 생성
set.SetItem("Fields", 32)  # 인자값 입력.  32 == hwp.Hiding("PageNumPos")
act.Execute(set)  # 메서드 실행

 

맥락은 비슷한 것 같은데, 완전히 다른 문법처럼 보입니다.

그래도 훨씬 더 간결하지 않나요? 그리고 간결한 게 전부가 아니에요.

API메서드의 강력한 장점이 하나 더 있어요!

그건 바로, 현재 설정되어 있는 값을 알아낼 수 있다는 겁니다.

현재 페이지에 "쪽번호감추기"가 설정되어 있는지 확인하는 방법은

act = hwp.CreateAction("PageHiding")
set = act.CreateSet()
act.GetDefault(set)  # GetDefault를 통해 현재 설정값을 set에 입력
print(set.Item("Fields"))
# 32를 리턴 == "쪽번호 감추기가 적용되어 있는 상태"



######### 스크립트매크로 코드로는 현재 설정값을 알 수 없음 ###########
hwp.HAction.GetDefault("PageHiding", hwp.HParameterSet.HPageHiding.HSet)
print(hwp.HParameterSet.HPageHiding.Fields)
# 항상 0을 리턴

 

이 방법으로 현재 문서, 혹은 현재 구역이나 개체의 다양한 설정값들을 확인할 수 있어요.

예를 들어 페이지 방향이나 여백, 표나 이미지 등 다양한 개체의 사이즈나 설정값 등이 필요하면

관련된 액션의 이름(위의 "PageHiding")과 아이템의 이름(위의 "Fields")만 알면 되니까요.

(사실 이게 전부는 아니에요. set 안에 ItemSet 배열을 생성해야 하는 경우라든지 하는 경우도 있는데... 어렵지 않아요.)

 

오늘은 여기까지만 포스팅 하려고 해요. 마치기 전에...

 

여기까지 정독을 하셨다면 이런 질문을 해 보실 수 있어요.

'PageHiding이나 Fields 같은 문자열은 어디서 찾는 거지?'

나중에 별도의 포스팅으로 자세히 한 번 더 설명드릴게요.

간단히 말씀드리면,

이 때 사용하는 문서가 Action Table.hwp 와 ParameterSet Table.hwp 두 개의 파일이에요.

한글2010 컨트롤API 가이드 문서3종

 

- PageHiding 같은 문자열을 "Action ID"라고 부르고 Action Table.hwp에서 찾을 수 있어요. 이 액션과 매칭되는 ParameterSet ID도 같이 적혀 있어요. 이 액션아이디는 파라미터셋 아이디도 동일한 "PageHiding"을 쓰네요.

Action Table.hwp 23쪽 중간

 

- Fields 같은 문자열은 "Item ID"라고 불러요. 위의 Action Table에서 찾은 ParameterSet ID인 "PageHiding"으로 ParameterSet Table.hwp에서 검색해보면 Item ID가 "Fields" 한 개 밖에 없네요. 사용법은 Description에 나와 있고요.

 

ParameterSet Table.hwp 99쪽

덧 : 비트필드(16진수)는 두 개 이상 적용하려면 더하면 돼요. 머리말, 꼬리말과 쪽번호를 함께 숨기려면 Fields에 35(=1+2+32)

 

어떤가요?

스크립트매크로 녹화와 API매뉴얼을 조금만 참고하면

어떤 작업이든 자동화 해 볼만 하지 않겠어요?

 

문의사항이나, 도전해 보고 싶은 자동화 주제가 있다면

언제든 댓글로 남겨주시면 도움 드리고 싶어요.

 

오늘은 여기서 포스팅 마칩니다.

행복한 하루, 편안한 밤 되세요!

반응형

댓글0