해결된 질문
작성
·
239
답변 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)
이런 식으로 실행하시면 돼요.
추가로 궁금하신 점이 있으면 질문이나 댓글 남겨주세요^^
행복한 하루 되세요!!