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

채희원님의 프로필 이미지
채희원

작성한 질문수

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

한글-파이썬 : 바탕쪽, 다단

해결된 질문

작성

·

476

2

안녕하세요. 파이썬으로 한글자동화 업무를 위해 공부하고있습니다.

바탕쪽 혹은 다단으로 들어가는 코드에서

파이썬코드로 문법을 바꾸어도 편집모드로 들어가지지 않거나 실행이 되지 않습니다.

혹시 다른 방법이 있는지 궁금합니다!

 

  1. 바탕쪽

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

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

희원님 안녕하세요?^^

(어떤 작업을 하시려는지 잘은 모르겠지만)

아래와 같이 코드를 수정하시면
말씀하신 작업은 잘 적용되는 것 같습니다.
참고하시기 바랍니다.

image

# 바탕쪽 진입 코드
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)
채희원님의 프로필 이미지
채희원
질문자

정말 사소한 것 때문에 작동이 안되는 거였군요... 잘 작동됩니다. 정말 감사합니다.

바탕쪽에서 Type 가아닌 type인 것을 알 수 있는 방법이 있을까요?

한컴에서 제공되는 파일들 (API, 파라미터액션등..)에서 찾아볼 수는 있는지...

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

파라미터는 쉽게 찾으실 수 있습니다.

귀찮은 작업 딱 한 번만 하시면 되는데ㅜ

  1. 가상환경 폴더(venv)/Lib/site-package/pythonwin/start_pythonwin.pyw 실행

  2. tools - COM Makepy utility 선택

  3. 라이브러리 중 "HwpObject 1.0 Type Library (1.0)" 찾아서 선택 후 "OK"

  4. 아래 경로의 7D2B6F3C-~.py 파일을 찾아서 프로젝트 폴더로 복사

image

  1. 위 파일을 틈틈이 열어서 "class 파라미터셋 이름"으로 검색하시면 관련 아이템들이 나옵니다.

예를 들어 HColDef의 파라미터를 찾아보면 _propmap_get_ 안에

image

이렇게 파라미터셋의 아이템들이 나와 있습니다.

 

더 쉬운 방법으로는

>>> 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() 등을 호출하셔서 확인하는 방법도 있습니다.

 

참고하시기 바랍니다^^

채희원님의 프로필 이미지
채희원

작성한 질문수

질문하기