안녕하세요. 제가 찾던 게 바로 이건데 딱 있어서 너무 놀랐습니다. 따라해보니까 이런 에러가 뜨는데 원인과 해결책을 알려주시면 감사하겠습니다.
hwp.Open('c:/users/xxxxxxx/Documents/awards.hwp') Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "", line 1, in hwp.Open('c:/users/xxxxxxx/Documents/awards.hwp') File "", line 2, in open pywintypes.com_error: (-2147352562, '매개 변수의 개수가 잘못되었습니다.', None, None)
안녕하세요?
위의 오류를 해결하는 방법은 굉장히 간단합니다. 다만, 상황이해를 돕기 위해 설명을 몇 줄만 붙이겠습니다.
파이썬으로 한/글을 불러올 때 아래 두 가지 코드의 차이를 아시면 좋겠습니다. (둘 다 실행되는 코드입니다.)
# 1. Early Binding Case
import win32com.client as win32
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.Open("c:\\users\\smj02\\desktop\\sample.hwp")
# 2. Dynamic Case
import win32com.client as win32
hwp = win32.Dispatch("hwpframe.hwpobject")
hwp.Open("c:\\users\\smj02\\desktop\\sample.hwp", Format="HWP", arg="")
첫 번째 코드처럼 gencache.EnsureDispatch를 사용해서 한/글을 불러오면
다소 큰 메모리와 임시저장공간을 사용해서,
한/글의 모든 API 메서드와 디폴트 파라미터를 미리 불러옵니다.
그래서 hwp.Open 메서드를 실행할 때, 세 개의 인자(Path, Format, arg) 중에서
두 개의 파라미터인 Format과 arg에 기본값이 미리 매겨집니다. (Format="HWP", arg=None)
그래서 필수 파라미터만 입력하면 되므로 코딩이 간편해집니다.
두 번째 코드처럼 Dispatch 메서드만 사용해서 한/글을 디스패치할 경우에는
위에서 설명한 과정이 생략됩니다.
간편하고 (아주조금) 빠르게 한/글을 불러오는 미미한 장점이 있지만,
이 경우에는 코딩할 때 기본 파라미터를 일일이 입력해 줘야 합니다.
그래서 Format 인자와 arg 인자를 직접 입력해 주는 것입니다.
그래서 오류 해결방법은
그냥 컨벤션처럼 첫 번째 코드를 사용하시면 좋겠습니다.
그럼에도 동일한 파라미터 오류가 생긴다면 (이런 일은 거의 없겠지만)
API매뉴얼을 통해 입력해야 하는 인자가 무엇인지 확인한 후에
전부 입력해 보시면 문제가 해결될 것입니다.
참고사항
해당 개발환경(또는 가상환경)에서 첫 번째 코드처럼 실행을 하셨으면
C:\Users\사용자이름\AppData\Local\Temp\gen_py 폴더 안에
일종의 캐시폴더와 여러 개의 py파일이 생겼을 것입니다. 아래처럼요.
그러면 이후로는 (임의로 이 폴더를 직접 찾아가서 캐시파일들을 삭제하기 전까지는)
단순히 win32.Dispatch("hwpframe.hwpobject") 코드만으로도 자동으로 early-binding이 적용됩니다.
결론
보여주신 오류는 한/글을 실행할 때 win32.gencache.EnsureDispatch로 실행하면 해결되는 간단한 오류입니다.
혹은 hwp.Open 메서드를 실행하실 때 Format, arg 등 두 개의 인자에도 파라미터를 할당(Format="HWP", arg="")하시면 해결될 것입니다.
추가 질문은 댓글로 남겨주시면 답변 드리겠습니다.
감사합니다. 행복한 하루 되세요!
'아래아한글 자동화 > python+hwp 중급' 카테고리의 다른 글
[QnA] 엑셀에서 줄바꿈된 텍스트를 한/글로 옮길 때 줄바꿈 유지하기 (5) | 2022.08.04 |
---|---|
[QnA] 한글 특정 표의 특정 셀 값들을 엑셀에 일괄삽입하기 (0) | 2022.06.20 |
[QnA] 표 내의 일부 테두리를 점선으로 바꾸는 법 (0) | 2022.05.13 |
댓글