inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

한/글 문서를 불러오고, 저장하고, 닫기

안녕하세요 표 생성이 막힙니다.

300

한글치트키

작성한 질문수 5

1

import win32com.client
import os
import shutil

# 캐시 디렉토리 경로
cache_dir = os.path.join(os.getenv('LOCALAPPDATA'), 'Temp', 'gen_py')

# 캐시 디렉토리 삭제
if os.path.exists(cache_dir):
    shutil.rmtree(cache_dir)

# 캐시 재생성 및 한글 객체 생성
hwp = win32com.client.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Item(0).Visible = True
hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")

# 문서 시작 위치로 커서 이동
hwp.MovePos(2)  # 문서 시작으로 커서 이동

# 표 생성: 행(5), 열(3)
act = hwp.CreateAction("TableCreate")
pset = act.CreateSet()
act.GetDefault(pset)
pset.SetItem("Cols", 3)
pset.SetItem("Rows", 5)
act.Execute(pset)

이게 실행코드고 오류는
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\gencache.py:255, in GetModuleForCLSID(clsid)
    254 try:
--> 255     __import__(sub_mod_name)
    256 except ImportError:

ModuleNotFoundError: No module named 'win32com.gen_py.7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0.IDHwpAction'

During handling of the above exception, another exception occurred:

FileNotFoundError                         Traceback (most recent call last)
Cell In[3], line 21
     18 hwp.MovePos(2)  # 문서 시작으로 커서 이동
     20 # 표 생성: 행(5), 열(3)
---> 21 act = hwp.CreateAction("TableCreate")
     22 pset = act.CreateSet()
     23 act.GetDefault(pset)

File ~\AppData\Local\Temp\gen_py\3.12\7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0\IHwpObject.py:106, in IHwpObject.CreateAction(self, actidstr)
    103 ret = self._oleobj_.InvokeTypes(10031, LCID, 1, (9, 0), ((8, 1),),actidstr
    104 	)
    105 if ret is not None:
--> 106 	ret = Dispatch(ret, 'CreateAction', None)
    107 return ret

File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\__init__.py:119, in Dispatch(dispatch, userName, resultCLSID, typeinfo, UnicodeToString, clsctx)
    117 assert UnicodeToString is None, "this is deprecated and will go away"
    118 dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch, userName, clsctx)
--> 119 return __WrapDispatch(dispatch, userName, resultCLSID, typeinfo, clsctx=clsctx)

File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\__init__.py:47, in __WrapDispatch(dispatch, userName, resultCLSID, typeinfo, UnicodeToString, clsctx, WrapperClass)
     43 from . import gencache
     45 # Attempt to load generated module support
     46 # This may load the module, and make it available
---> 47 klass = gencache.GetClassForCLSID(resultCLSID)
     48 if klass is not None:
     49     return klass(dispatch)

File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\gencache.py:200, in GetClassForCLSID(clsid)
    198 if CLSIDToClass.HasClass(clsid):
    199     return CLSIDToClass.GetClass(clsid)
--> 200 mod = GetModuleForCLSID(clsid)
    201 if mod is None:
    202     return None

File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\gencache.py:264, in GetModuleForCLSID(clsid)
    261         info = demandGeneratedTypeLibraries[info]
    262     from . import makepy
--> 264     makepy.GenerateChildFromTypeLibSpec(sub_mod, info)
    265     # Generate does an import...
    266 mod = sys.modules[sub_mod_name]

File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\makepy.py:377, in GenerateChildFromTypeLibSpec(child, typelibInfo, verboseLevel, progressInstance, bUnicodeToString)
    374 progress.LogBeginGenerate(dir_path_name)
    376 gen = genpy.Generator(typelib, info.dll, progress)
--> 377 gen.generate_child(child, dir_path_name)
    378 progress.SetDescription("Importing module")
    379 importlib.invalidate_caches()

File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\genpy.py:1363, in Generator.generate_child(self, child, dir)
   1361 out_name = os.path.join(dir, an_item.python_name) + ".py"
   1362 worked = False
-> 1363 self.file = self.open_writer(out_name)
   1364 try:
   1365     if oleitem is not None:

File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\genpy.py:1049, in Generator.open_writer(self, filename, encoding)
   1039 def open_writer(self, filename, encoding="mbcs"):
   1040     # A place to put code to open a file with the appropriate encoding.
   1041     # Does *not* set self.file - just opens and returns a file.
   (...)
   1046     # don't step on each others' toes.
   1047     # Could be a classmethod one day...
   1048     temp_filename = self.get_temp_filename(filename)
-> 1049     return open(temp_filename, "wt", encoding=encoding)

FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\lemon\\AppData\\Local\\Temp\\gen_py\\3.12\\7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0\\IDHwpAction.py.7700.temp'

이렇게 나오는데 해결할 수 있는 방법 있을까요?

python 한컴오피스

답변 1

1

일코

레몬민트님 안녕하세요?

해당 오류는 TableCreate 액션으로 인한 오류가 아니라, 아래아한글 인스턴스가 생성되지 않은 것으로 보입니다.

 

캐시디렉토리를 삭제하신 특별한 이유가 있으실까요?

 

참고로, 아래 코드로 바꿔 실행하시면

오류는 없어질 듯 합니다.

 

#%pip install pyhwpx
from pyhwpx import Hwp

hwp = Hwp()
hwp.create_table(3, 5)

 

저도 뚜렷한 오류원인을 파악해보겠습니다.

감사합니다.

1

한글치트키

오류를 해결하려고 여러 시도를 하다보니 캐시 디렉토리로 문제가 생기는 경우도 있어서 삭제를 넣었습니다.

 

주신 코드가 잘 작동하기는 하나 실행 후 컴파일 에러가 이렇게 나는군요

--------------------------------------------------------------------------- com_error Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_14292\3428825549.py in ?() 1 from pyhwpx import Hwp 2 3 hwp = Hwp() ----> 4 hwp.create_table(3, 5) c:\Users\lemon\AppData\Local\Programs\Python\Python312\Lib\site-packages\pyhwpx.py in ?(self, rows, cols, treat_as_char, width_type, height_type, header, height) 2594 # 제목 행 여부 적용(header) 2595 pset = self.hwp.HParameterSet.HShapeObject 2596 self.hwp.HAction.GetDefault("TablePropertyDialog", pset.HSet) 2597 pset.ShapeTableCell.Header = header -> 2598 self.hwp.HAction.Execute("TablePropertyDialog", pset.HSet) ~\AppData\Local\Temp\gen_py\3.12\7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0.py in ?(self, actname, pVal) 33 def Execute(self, actname=defaultNamedNotOptArg, pVal=defaultNamedNotOptArg): 34 'method Execute' ---> 35 return self._oleobj_.InvokeTypes(15001, LCID, 1, (11, 0), ((8, 1), (9, 1)),actname 36 , pVal) com_error: (-2147417851, '서버에서 예외 오류가 발생했습니다.', None, None)

 

 

1

일코

(혹시, 주피터 실행시에는 잘 되지만, 컴파일로 만들어 실행할 때는 오류가 난다는 말씀인지요?)

 

create_table 메서드에서 오류가 나는 게 흔한 경우는 아닌데, 로컬환경의 뭔가에 오류 원인이 있는 것 같습니다.

 

혹시 한/글 버전이 어떻게 되나요?

 

pyhwpx.Hwp 클래스의 create_table 메서드 소스코드를 열어보시면 표를 생성하는 액션과 필수 파라미터셋 목록을 모두 매핑해놓았습니다. 해당 코드 참고하셔서 액션을 정의하는 기존의 방식으로 코드 완성하시면 급한 불은 끌 수 있겠습니다. pyhwpx로 만든 hwp인스턴스나, win32로 생성하는 hwp 개체나 거의 동일하므로, 캐시 따로 조작하지 마시고 pyhwpx를 쓰시는 것을 추천드립니다.

 

확실하진 않지만, pythonwin으로 MakePy Utility를 실행하셔서 아래아한글 타입라이브러리를 한 번 재생성하시면 위의 오류들이 없어질 듯도 합니다.

 

답변이 진짜 엉성하고 대충이네요.. 죄송합니다. 밖에 나와 있어서ㅜ

1

한글치트키

아뇨아뇨 괜찮습니다 ㅎㅎ

제가 현재사용중인 한글버젼은 2022버젼이고 컴파일 에러 안생기게 제가 직접 수정했으니 괜찮아요 😊 (pyhwpx 약간 뜯어봤는데, 쓸 수 있는 것들이 많아서 좀 놀랐어요!!)

 

맨 땅에서 이 정도까지 만드셨다는게 존경스럽네요 :)

0

일코

자동화 교육이나 부업 때 유용하게 써먹은 아이디어를

메서드나 프로퍼티 형태로 만들어 pyhwpx에 추가하고 있습니다.

보시면 아시겠지만, 별다른 체계나 구조도 전혀 없고,

중구난방입니다ㅜㅜㅜ

0

한글치트키

확실히 pyhwpx 모듈 자체가 코드 안정성이 떨어지긴 합니다 🙂

그래서 제가 pyhwpx를 참고해서 hwpWings 라는 모듈을 2026년까지 새로 하나 만드려고해요 ㅎㅎ

이런 소중한 연구자료 남겨주셔서 감사합니다!

앞으로 많이 질문하겠습니다 :)

1

한글치트키

pyhwpx의 create_table 관련 오류가

바로 아래 저 구문 때문인데, 아래 코드처럼 try-except 구문을 쓰거나 빼버리니 오류가 안나더라구요 🙂 다른 컴퓨터에선 모르겠지만, 기능은 정상작동하고 오류 안나니까

제 개인적인 생각으로 저 구문은 빼는게 나을 것 같습니다 ㅎㅎ

self.hwp.HAction.Execute("TablePropertyDialog", pset.HSet)
# 제목 행 여부 적용(header)
        pset = self.hwp.HParameterSet.HShapeObject
        self.hwp.HAction.GetDefault("TablePropertyDialog", pset.HSet)
        pset.ShapeTableCell.Header = header
        # try:
        #     self.hwp.HAction.Execute("TablePropertyDialog", pset.HSet)
        # except:
        #     pass

섹션7과 같은 수학 수식을 백지에서 시작할 때 어떻게 만들 수 있을까요?

0

76

1

hwp 병렬 작업시 클립보드 충돌문제

0

58

1

본문을 각주로 내리는 법

1

93

1

한글 자동화 삽도 삽입!!

1

384

2

한글 표 내부 위치 찾는 코드좀 알려주세요 ㅠㅠ

1

233

2

빈 문서를 새로 열때는 팝업이 안나오는데 기존 문서를 열면 팝업이 나옵니다

1

118

2

사무실 컴퓨터ㅠ

0

96

2

글자입력 여러번 실행기

0

67

1

현재 커서 문단에 아무런 내용이 없는지 확인하기

1

102

1

특정 스타일을 찾아 이동하는 방법

1

162

2

한/글 파일 open 시 '상위 버전에서...' 메세지 안 뜨게 하는 방법?

1

1108

1

win32com 으로 hwp 문자열 검색하기 문의

1

222

2

[응용] 엑셀문서 값을 필드에 입력하기 질

1

123

1

표 병합하기 관련

0

140

0

메타태그 삽입 자동화

0

191

1

스크립트 매크로 초기화 하고 싶습니다.

1

270

2

한글 창이 여러 개 존재할 때 pyhwpx 모듈로 접근하는 방법을 알고 싶습니다.

1

271

1

표안의 특정 필드에 있는 이미지를 복사하여 한글 외부에 저장하기

1

273

2

스타일 싹 다 지우고 바탕글로 통일하는 방법 문의드립니다.

1

283

0

하위의 여러 폴더 중 특정폴더의 사진만 추출하기

1

345

2

한글 수식을 자동으로 넣는 코드를 만들었는데, 수식 사이의 간격이 계속 벌어집니다.

1

658

1

보유 특허 검색 페이지에서 검색이 되지 않습니다.

1

139

1

hwp 페이지별 분할 저장하는 코드 관련 문의

0

447

0

한글 문서에 사용된 폰트명 추출

1

646

1