본문 바로가기
아래아한글 자동화/python+hwp 중급

[QnA] Open메서드 실행시 오류:"매개변수의 개수가 잘못되었습니다." 해결법

by 일코 2022. 8. 2.
안녕하세요. 제가 찾던 게 바로 이건데 딱 있어서 너무 놀랐습니다. 따라해보니까 이런 에러가 뜨는데 원인과 해결책을 알려주시면 감사하겠습니다.
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="")하시면 해결될 것입니다.

 

추가 질문은 댓글로 남겨주시면 답변 드리겠습니다.

감사합니다. 행복한 하루 되세요!

댓글