해결된 질문
작성
·
476
2
안녕하세요. 파이썬으로 한글자동화 업무를 위해 공부하고있습니다.
바탕쪽 혹은 다단으로 들어가는 코드에서
파이썬코드로 문법을 바꾸어도 편집모드로 들어가지지 않거나 실행이 되지 않습니다.
혹시 다른 방법이 있는지 궁금합니다!
바탕쪽
hwp.HAction.GetDefault("MasterPage", hwp.HParameterSet.HMasterPage.HSet)
hwp.HParameterSet.HMasterPage.Duplicate = 0
hwp.HParameterSet.HMasterPage.Front = 0
hwp.HParameterSet.HMasterPage.Type = 0
hwp.HParameterSet.HMasterPage.HSet.SetItem("ApplyTo", 2)
hwp.HAction.Execute("MasterPage", hwp.HParameterSet.HMasterPage.HSet)
--------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[7], line 2
1 hwp.HAction.GetDefault("MasterPage", hwp.HParameterSet.HMasterPage.HSet)
----> 2 hwp.HParameterSet.HMasterPage.SetItem(Duplicate, 0)
3 hwp.HParameterSet.HMasterPage.SetItem(Front, 0)
4 hwp.HParameterSet.HMasterPage.SetItem(Type ,0)
File ~\anaconda3\Lib\site-packages\win32com\client\__init__.py:580, in DispatchBaseClass.__getattr__(self, attr)
578 args = self._prop_map_get_.get(attr)
579 if args is None:
--> 580 raise AttributeError(
581 "'%s' object has no attribute '%s'" % (repr(self), attr)
582 )
583 return self._ApplyTypes_(*args)
AttributeError: '<win32com.gen_py.HwpObject 1.0 Type Library.HMasterPage instance at 0x1349180151824>' object has no attribute 'SetItem'
2.다단
hwp.HAction.GetDefault("MultiColumn", hwp.HParameterSet.HColDef.HSet)
hwp.HParameterSet.HColDef.Count = 2
hwp.HParameterSet.HColDef.SameGap = MiliToHwpUnit(8.0)
hwp.HParameterSet.HColDef.HSet.SetItem("ApplyClass", 832)
hwp.HParameterSet.HColDef.HSet.SetItem("ApplyTo", 6)
hwp.HAction.Execute("MultiColumn", hwp.HParameterSet.HColDef.HSet)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[5], line 3
1 hwp.HAction.GetDefault("MultiColumn", hwp.HParameterSet.HColDef.HSet)
2 hwp.HParameterSet.HColDef.Count = 2
----> 3 hwp.HParameterSet.HColDef.SameGap = MiliToHwpUnit(8.0)
4 hwp.HParameterSet.HColDef.HSet.SetItem("ApplyClass", 832)
5 hwp.HParameterSet.HColDef.HSet.SetItem("ApplyTo", 6)
NameError: name 'MiliToHwpUnit' is not defined
답변 1
2
희원님 안녕하세요?^^
(어떤 작업을 하시려는지 잘은 모르겠지만)
아래와 같이 코드를 수정하시면
말씀하신 작업은 잘 적용되는 것 같습니다.
참고하시기 바랍니다.
# 바탕쪽 진입 코드
pset = hwp.HParameterSet.HMasterPage
hwp.HAction.GetDefault("MasterPage", pset.HSet)
pset.Duplicate = 0
pset.Front = 0
pset.type = 0 # <--
pset.HSet.SetItem("ApplyTo", 2)
hwp.HAction.Execute("MasterPage", pset.HSet)
# 다단 설정
pset = hwp.HParameterSet.HColDef
hwp.HAction.GetDefault("MultiColumn", pset.HSet)
pset.Count = 3
pset.SameGap = hwp.MiliToHwpUnit(8.0) # <--
pset.HSet.SetItem("ApplyClass", 832)
pset.HSet.SetItem("ApplyTo", 6)
hwp.HAction.Execute("MultiColumn", pset.HSet)
파라미터는 쉽게 찾으실 수 있습니다.
귀찮은 작업 딱 한 번만 하시면 되는데ㅜ
가상환경 폴더(venv)/Lib/site-package/pythonwin/start_pythonwin.pyw 실행
tools - COM Makepy utility 선택
라이브러리 중 "HwpObject 1.0 Type Library (1.0)" 찾아서 선택 후 "OK"
아래 경로의 7D2B6F3C-~.py 파일을 찾아서 프로젝트 폴더로 복사
위 파일을 틈틈이 열어서 "class 파라미터셋 이름"으로 검색하시면 관련 아이템들이 나옵니다.
예를 들어 HColDef의 파라미터를 찾아보면 _propmap_get_
안에
이렇게 파라미터셋의 아이템들이 나와 있습니다.
더 쉬운 방법으로는
>>> hwp.HParameterSet.HColDef._prop_map_get_
{'Count': (16417, 2, (18, 0), (), 'Count', None),
'HSet': (1, 2, (9, 0), (), 'HSet', None),
'Layout': (16421, 2, (18, 0), (), 'Layout', None),
'LineColor': (16424, 2, (19, 0), (), 'LineColor', None),
'LineType': (16422, 2, (18, 0), (), 'LineType', None),
'LineWidth': (16423, 2, (18, 0), (), 'LineWidth', None),
'SameGap': (16419, 2, (3, 0), (), 'SameGap', None),
'SameSize': (16418, 2, (18, 0), (), 'SameSize', None),
'WidthGap': (16420, 2, (9, 0), (), 'WidthGap', None),
'type': (16416, 2, (18, 0), (), 'type', None)}
이렇게 직접 파라미터셋._prop_map_get_.keys() 등을 호출하셔서 확인하는 방법도 있습니다.
참고하시기 바랍니다^^
정말 사소한 것 때문에 작동이 안되는 거였군요... 잘 작동됩니다. 정말 감사합니다.
바탕쪽에서 Type 가아닌 type인 것을 알 수 있는 방법이 있을까요?
한컴에서 제공되는 파일들 (API, 파라미터액션등..)에서 찾아볼 수는 있는지...