해결된 질문
작성
·
105
1
안녕하세요 일코님
페이지의 단을 1단으로 변경하기 위해서,
한글에서 매크로 녹화를 하여 스크립트를 아래와 같이 땄습니다.
HAction.GetDefault("MultiColumn", HParameterSet.HColDef.HSet);
with (HParameterSet.HColDef)
{
Type = ColDefType("Newspaper");
CreateItemArray("WidthGap", 1);
WidthGap.Item(0) = MiliToHwpUnit(115.6);
LineType = HwpLineType("None");
HSet.SetItem("ApplyClass", 868);
HSet.SetItem("ApplyTo", 2);
}
HAction.Execute("MultiColumn", HParameterSet.HColDef.HSet);
이 매크로를 사용하기 위해서
hwp.HAction.GetDefault("MultiColumn", hwp.HParameterSet.HColDef.HSet)
hwp.HParameterSet.HColDef.Type = hwp.ColDefType("Newspaper")
hwp.HParameterSet.HColDef.CreateItemArray("WidthGap", 1)
hwp.HParameterSet.HColDef.WidthGap.Item(0) = hwp.MiliToHwpUnit(115.6)
hwp.HParameterSet.HColDef.HSet.SetItem("ApplyClass", 868)
hwp.HParameterSet.HColDef.HSet.SetItem("ApplyTo", 2)
hwp.HAction.Execute("MultiColumn", hwp.HParameterSet.hwp.HColDef.HSet)
이렇게 코드를 작성했는데요.
문제는 두번째 줄인 hwp.HParameterSet.HColDef.Type 이부분과
네번째 줄 hwp.HParameterSet.HColDef.WidthGap.Item(0) 입니다.
두번째 줄을 실행했을 때
AttributeError: '<win32com.gen_py.HwpObject 1.0 Type Library.HColDef instance at 0x1617095373456>' object has no attribute 'Type'
이러한 에러메시지가 뜨고
네번째 줄은
hwp.HParameterSet.HColDef.WidthGap.Item(0) = hwp.MiliToHwpUnit(115.6)
IndentationError: unexpected indent
이렇게 나오는데요.. 뭐가문제일까요?
늘 친절하고 자세하게 답변해주셔서 정말 감사합니다!
답변 1
1
병현님 안녕하세요?
AttributeError: '<win32com.gen_py.HwpObject 1.0 Type Library.HColDef instance at 0x1617095373456>' object has no attribute 'Type'
위 오류는 스크립트매크로를 파이썬으로 옮길 때 자주 발생하는 오류인데요. win32 API를 파이썬 클래스로 변환하면서 파이썬 문법이 아닌 부분이 충돌하기 때문에, 스크립트매크로 문법과 파이썬 문법이 약간 달라집니다.
대표적으로
hwp.HParameterSet.HColDef.WidthGap.Item(0) = hwp.MiliToHwpUnit(115.6)
위와 같은 코드는 아래처럼 변경해주시면 됩니다.
hwp.HParameterSet.HColDef.WidthGap.SetItem(0, hwp.MiliToHwpUnit(115.6))
그리고 두 번째 오류인
IndentationError: unexpected indent
이 오류메시지는 들여쓰기 관련 오류인데요.
지금 모든 줄에 들여쓰기가 일괄 적용되어 있는 것으로 보입니다.
hwp.
앞의 들여쓰기들을 모두 삭제해주시면 해결될 것 같습니다.
안 되는 부분 있으면 또 알려주세요^^
더위 잘 피하시고, 행복한 하루 되세요~
코드 마지막 줄에 "hwp." 이 중간에 하나 더 들어가 있어서 오류가 나요.
그리고 보통 HColDef.Count가 들어가야 할 것 같은데,
복사해주신 코드에는 그게 없어서 이상하네요.
참고하시라고 다단 관련 샘플코드 몇 개 드려볼게요.
def script_macro1(): # 단순 다단
pset = hwp.HParameterSet.HColDef
hwp.HAction.GetDefault("MultiColumn", pset.HSet)
pset.Count = 2
pset.SameGap = hwp.MiliToHwpUnit(8.0)
pset.HSet.SetItem("ApplyClass", 832)
pset.HSet.SetItem("ApplyTo", 6)
hwp.HAction.Execute("MultiColumn", pset.HSet)
def script_macro2(): # 프리셋 활용하는 다단
pset = hwp.HParameterSet.HColDef
hwp.HAction.GetDefault("MultiColumnPreset1", pset.HSet)
pset.type = hwp.ColDefType("Newspaper")
pset.SameSize = 1
pset.Count = 2
pset.Layout = hwp.ColLayoutType("Left")
pset.SameGap = hwp.MiliToHwpUnit(8.0)
pset.LineType = hwp.HwpLineType("None")
pset.LineWidth = hwp.HwpLineWidth("0.1mm")
pset.LineColor = hwp.RGBColor(0, 0, 0)
pset.HSet.SetItem("ApplyClass", 832)
pset.HSet.SetItem("ApplyTo", 6)
hwp.HAction.Execute("MultiColumnPreset1", pset.HSet)
def script_macro3(): # 병현님 코드(오류남)
hwp.HAction.GetDefault("MultiColumn", hwp.HParameterSet.HColDef.HSet)
hwp.HParameterSet.HColDef.type = hwp.ColDefType("Newspaper")
hwp.HParameterSet.HColDef.CreateItemArray("WidthGap", 1)
hwp.HParameterSet.HColDef.WidthGap.SetItem(0, hwp.MiliToHwpUnit(115.6))
hwp.HParameterSet.HColDef.HSet.SetItem("ApplyClass", 868)
hwp.HParameterSet.HColDef.HSet.SetItem("ApplyTo", 2)
hwp.HAction.Execute("MultiColumn", hwp.HParameterSet.HColDef.HSet)
def script_macro4(): # 병현님 코드에 Count 라인만 더함
pset = hwp.HParameterSet.HColDef
hwp.HAction.GetDefault("MultiColumn", pset.HSet)
pset.Count = 2
hwp.HParameterSet.HColDef.CreateItemArray("WidthGap", 1)
hwp.HParameterSet.HColDef.WidthGap.SetItem(0, hwp.MiliToHwpUnit(115.6))
pset.HSet.SetItem("ApplyClass", 868)
pset.HSet.SetItem("ApplyTo", 2)
hwp.HAction.Execute("MultiColumn", pset.HSet)
Count=1에서 오류가 나요.
Count가 1이면 다단을 쓰지 않겠다는 뜻인 같은데...
원래 하시려던 작업이 뭐였는지 잘 모르겠지만,
제가 녹화해서 작성한 다단해제 함수를 한 번 보내드려볼게요.
참고해주세요.
def 다단해제():
pset = hwp.HParameterSet.HColDef
hwp.HAction.GetDefault("MultiColumnPreset0", pset.HSet)
pset.type = hwp.ColDefType("Newspaper")
pset.SameSize = 1
pset.Count = 1
pset.Layout = hwp.ColLayoutType("Left")
pset.SameGap = hwp.MiliToHwpUnit(0.0)
pset.LineType = hwp.HwpLineType("None")
pset.LineWidth = hwp.HwpLineWidth("0.1mm")
pset.LineColor = hwp.RGBColor(0, 0, 0)
pset.HSet.SetItem("ApplyClass", 832)
pset.HSet.SetItem("ApplyTo", 6)
return hwp.HAction.Execute("MultiColumnPreset0", pset.HSet)
감사합니다!
잘 되는듯 하였는데...
코드를 아래와 같이 썼거든요.
(들여쓰기는 제대로 되어있습니다)
이부분을 실행할 때,
터미널에 이런 오류가 발생합니다..ㅠㅠ 무슨문제일까요??