인프런 커뮤니티 질문&답변

YongJun(Passion)님의 프로필 이미지
YongJun(Passion)

작성한 질문수

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

문서의 필드목록 및 필드 값 취득하기

파라미터 서브 타입 질문드립니다.

해결된 질문

작성

·

239

1

안녕하세요 일코님

일코님 덕분에 많이 활용하고 있는 학생입니다.

다름이 아니라

ActionTable에서 파라미터가 있는 경우를 다루는 거까지는 잘 되는것 같지만

파라미터의 서브타입 있는 경우가 매우 어렵게 느껴집니다.

(강의에서 파라미터를 사용하는 방법까지는 이해가 되었지만 그 이후 서브 타입을 활용한 부분을 보는 예시가 있을까요?)

표의 배경색을 바꾸려다 서브타입을 지정해야하는데 이 부분이 잘 안됩니다.

답변 1

1

일코님의 프로필 이미지
일코
지식공유자

Jun님 안녕하세요?^^

한/글 매크로를 실행하는 다양한 방법이 있지만,

개인적으로는 CreateAction이나 CreateSet, CreateItemSet 등을 활용하는 게 너무 힘들어서

어디가 문제인지 찾기가 힘들더라고요ㅜ 매뉴얼이 너무 오래 된 것도 문제인 것 같고요..

하여튼 지금은 거의 대부분 스크립트매크로 방식을 그대로 활용하고 있어요.

 

예를 들면, CreateAction 방식은 아래처럼 짜는 거고

import win32com.client as win32
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Item(0).Visible = True


# 모든 여백을 0으로 하고, 좌우여백만 30mm로 설정하는 코드
Act = hwp.CreateAction("PageSetup")
Set = Act.CreateSet()
Act.GetDefault(Set)
Set.SetItem("ApplyTo", 3)  # 2:현재구역, 3:문서전체, 4:새구역으로
Pset = Set.CreateItemSet("PageDef", "PageDef")
Pset.SetItem("TopMargin", 0)
Pset.SetItem("BottomMargin", 0)
Pset.SetItem("LeftMargin", hwp.MiliToHwpUnit(30))
Pset.SetItem("RightMargin", hwp.MiliToHwpUnit(30))
Pset.SetItem("HeaderLen", 0)
Pset.SetItem("FooterLen", 0)
Pset.SetItem("GutterLen", 0)
Act.Execute(Set)

 

HAction 방식은 아래처럼 짜는 거예요.
동작은 동일하고요.

pset = hwp.HParameterSet.HSecDef
hwp.HAction.GetDefault("PageSetup", pset.HSet)
pset.PageDef.TopMargin = 0
pset.PageDef.BottomMargin = 0
pset.PageDef.LeftMargin = hwp.MiliToHwpUnit(30)
pset.PageDef.RightMargin = hwp.MiliToHwpUnit(30)
pset.PageDef.HeaderLen = 0
pset.PageDef.FooterLen = 0
pset.PageDef.GutterLen = 0
pset.HSet.SetItem("ApplyTo", 3)
hwp.HAction.Execute("PageSetup", pset.HSet)

 

별 차이 없는 것 같지만, 아래 방식의 장점은
① 서브셋(아이템셋)을 쓰지 않는다.
② API문서 대신 스크립트매크로를 통해서 액션아이디와 파라미터셋을 찾을 수 있다.

정도인 것 같아요.

 

그래서 두 번째 방식으로 말씀하신 표의 배경색을 바꾸는 예시는,

pset = hwp.HParameterSet.HCellBorderFill
hwp.HAction.GetDefault("CellBorderFill", pset.HSet)
pset.FillAttr.type = hwp.BrushType("NullBrush|WinBrush")
pset.FillAttr.WinBrushFaceColor = hwp.RGBColor(255, 132, 58)
pset.FillAttr.WinBrushHatchColor = hwp.RGBColor(153, 153, 153)
pset.FillAttr.WinBrushFaceStyle = hwp.HatchStyle("None")
pset.FillAttr.WindowsBrush = 1
hwp.HAction.Execute("CellBorderFill", pset.HSet)

 

이런 식으로 실행하시면 돼요.

추가로 궁금하신 점이 있으면 질문이나 댓글 남겨주세요^^

 

행복한 하루 되세요!!

YongJun(Passion)님의 프로필 이미지
YongJun(Passion)

작성한 질문수

질문하기