본문 바로가기
카테고리 없음

[QnA] 한/글 자동화 코드를 짤 때, 어떤 경우에 서브파라미터셋을 사용하나요?

by 일코 2022. 1. 21.

 

안녕하세요?

위와 같이 질문 주셨는데,

답변을 간단히 댓글로 달아드리기보다는

조금 상세히 설명을 드리고 싶어서

포스팅으로 남깁니다.

 

질문을 달아주신 포스팅은 아래에 링크로 남겨둡니다.

 

4. 문서여백을 파이썬으로 바꿀 수 있을까?

안녕하세요? 한/글 자동화 응용편에 보시면, 한/글에서 녹화한 스크립트 매크로와 API매뉴얼의 기본적인 액션 생성 방법 두 가지 문법을 보여드렸습니다. [파이썬-아래아한글] API매뉴얼과 스크립

martinii.fun

 

먼저 한/글 스크립트 중

구체적인 액션을 정의할 때 사용하는

파라미터셋의 계층에 대해

설명드리고 싶습니다.

 

(위의 포스팅을 예로 들어 설명하겠습니다.)

API 문서 중 ParameterSet Table.hwp 문서를 열어서

"여백"으로 검색해보면

97페이지에 "87) PageDef : 구역 내의 용지 설정 속성" 이라는 파라미터셋이 검색됩니다.

 

그런데 한 가지 더 검색하셔야 하는 단계가 있습니다.

바로, PageDef가 다른 파라미터셋의 서브파라미터셋이 아닌가 를 확인해야 합니다.

그래서 PageDef로 검색해보시면,

아래처럼 SecDef의 서브타입인 것을 확인할 수 있습니다.

 

그런데 파라미터를 자세히 뜯어보면 재미있는 점이 있습니다.

바로, SecDef에도, PageDef에도 "ApplyTo"라는

동일한 이름의 파라미터가 있다는 점입니다.

 

그럼 어느 파라미터셋의 ApplyTo를 사용해야 할까요?

테스트해 보면 알 수 있습니다.

 

우측 화면은 Shift-Alt-Enter로 구역을 쪼개놓은 문서입니다.

입력한 코드는 아래와 같습니다.

Act = hwp.CreateAction("PageSetup")
Set = Act.CreateSet()  # SecDef
Act.GetDefault(Set)
PSet = Set.CreateItemSet("PageDef", "PageDef")
PSet.SetItem("TopMargin", 0)  # 위 여백을 0으로
PSet.SetItem("HeaderLen", 0)  # 머리말 길이를 0으로

Set.SetItem("ApplyTo", 2)  # 현재 구역(1페이지)에만 적용
PSet.SetItem("ApplyTo", 3)  # 문서 전체에 적용

Act.Execute(Set)

 

라인 8~9를 보시면,

일부러 SecDef(Set)와 PageDef(PSet)의 ApplyTo를 둘 다 적용해 보았습니다.

상위 파라미터셋인 SecDef의 ApplyTo가 적용되면 1페이지만 상단마진이 없어질 거고

하위 파라미터셋인 PageDef의 ApplyTo가 적용되면 문서 전체의 상단마진이 없어질 것입니다.

 

과연 어느 것이 적용될까요?

실행결과는 아래와 같습니다.

상위 파라미터셋의 값이 적용됩니다.

 

1페이지만 적용되었네요.

상위 파라미터셋인 SecDef에 넣은 ApplyTo 값이 적용되었다는 뜻입니다.

어찌 보면 당연한 결과 같기도 하고요.

 

다만,

이런 구조 자체를 모두 암기할 수는 없는 노릇이고,

파라미터셋과 액션테이블 문서를 검색하면서 자동화 코드를 짜는 것도

사실상 시간이 굉장히 많이 걸립니다.

 

다른 분들은 어떻게 하시는지 잘 모르겠지만,

저 개인적으로는

①최우선으로 "스크립트매크로 녹화" 기능을 활용합니다.

②그 후에는 HAction.Run 스크립트로 구현 가능한지 알아보고요.

③정 안 되는 경우에 액션이나 파라미터셋 테이블이나 오토메이션API를 직접 뒤집니다.

 

답이 되었기를 바랍니다.

행복한 하루 되세요!

댓글