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

윤병현님의 프로필 이미지
윤병현

작성한 질문수

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

메시지 박스 모드 설정 관련 & PDF로 저장

해결된 질문

작성

·

98

·

수정됨

1

 

안녕하세요~ 일코님

무더위에 건강 잘 챙기시기 바랍니다.

 

메시지 박스 모드가 제가 볼떄는 Yes 아니면 No인 부분이라 생각해서

hwp.SetMessageBoxMode(0x10000)

 

요렇게 설정을 했는데요.

이렇게 설정했음에도 불구하고 왜 계속 메시지박스가 뜨는걸까요??

 

메시지박스 관련 코드는

 

MB_MASK             0x00FFFFFF


1. 확인만 : IDOK(1)

MB_OK_ODOK          0x00000001
MB_OK_MASK          0x0000000F


2. 확인/취소 (MB_OKCANCEL) : IDOK(1), IDCANCEL(2)

MB_OKCANCEL_IDOK        0x00000010
MB_OKCANCEL_IDCANCEL    0x00000020
MB_OKCANCEL_MASK        0x000000F0      # 적용시 hwp.SetMessageBoxMode(0xF0)

3. 종료/재시도/무시(MB_ABORTRETRYIGNORE) : IDABORT(3), IDRETRY(4), IDIGNORE(5)

MB_ABORTRETRYIGNORE_IDABORT     0x00000100
MB_ABORTRETRYIGNORE_IDRETRY     0x00000200
MB_ABORTRETRYIGNORE_IDIGNORE    0x00000400
MB_ABORTRETRYIGNORE_MASK        0x00000F00


4. 예/아니오/취소(MB_YESNOCANCEL) : IDYES(6), IDNO(7), IDCANCEL(2)

MB_YESNOCANCEL_IDYES        0x00001000
MB_YESNOCANCEL_IDNO         0x00002000
MB_YESNOCANCEL_IDCANCEL     0x00004000
MB_YESNOCANCEL_MASK         0x0000F000


5. 예/아니오(MB_YESNO) : IDYES(6), IDNO(7)

MB_YESNOCANCEL_IDYES        0x00010000
MB_YESNOCANCEL_IDNO         0x00020000
MB_YESNOCANCEL_MASK         0x000F0000


6. 재시도/취소(MB_RETRYCANCEL) : IDRETRY(4), IDCANCEL(2)

MB_RETRYCANCEL_IDRETRY      0x00100000
MB_RETRYCANCEL_IDCANCEL     0x00200000
MB_RETRYCANCEL_MASK         0x00F00000

이렇게 정리해놨는데요.

저는 5번케이스라고 생각했는데 2번 케이스에 해당하는걸까요?

케이스를 구분하는건 어떤 기준인지 궁금합니다!

 

그리고 두번째로는,

hwp를 수정하고 저장한뒤, PDF로도 추가로 저장하고자 하여

아래와 같이 코드를 작성해 보았는데요.

# hwp 저장
hwp.save_as(save_path_문제지)  

# pdf 로 저장하기 위해서 경로 할당
파일이름, _ = os.path.splitext(os.path.basename(save_path_문제지))
저장경로 = os.path.join(os.path.dirname(save_path_문제지), 파일이름 + ".pdf")

# pdf로 저장하기
hwp.SaveAs(Path=os.path.join(os.path.dirname(save_path_문제지), 파일이름 + ".pdf"), Format="PDF")

 

그런데 터미널에 아래와 같은 오류가 뜨네요...

 

TypeError: Hwp.SaveAs() got an unexpected keyword argument 'Path'

 

이전에는 잘작동했떤 코드같은데 왜 안되는 걸까요?

 

잘부탁드립니다!! 늘 감사합니다.!

답변 1

1

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

병현님 안녕하세요?

 

1. SetMessageBoxMode 오류

사실 저도 아직 케이스의 구분기준을 정확히 몰라서

특정 메시지박스를 자동클릭하고 싶을 때 항상 시행착오를 겪습니다.

눈에 보이는 팝업은 [확인/취소] 인데, 내부에서는 [예/아니오] 라든지..

 

그래서 제 루틴은 아래와 같습니다.

① 우선 자동클릭이 되는지 확인하기 위해 모든 옵션을 1로 바꿔본다.

hwp.SetMessageBoxMode(0x111111)

② 만약 작동한다면, 아닌 것 같은 옵션부터 F로 바꿔본다.

hwp.SetMessageBoxMode(0x11F11F)
hwp.SetMessageBoxMode(0xF1F11F)
hwp.SetMessageBoxMode(0xF1FF1F)
hwp.SetMessageBoxMode(0xFFFF1F)

③ 하나가 골라질 때까지 반복하다가, 찾아냈으면 그 코드를 쓴다.

hwp.SetMessageBoxMode(0x000010)
# 클릭이 필요한 동작 수행
hwp.SetMessageBoxMode(0x0000F0)

 

이런 식으로 작업해보시면 금방 찾으실 수 있을 겁니다.

(사실 시행착오 없이 0x111111로 전부 "예"를 클릭하게 하고, 0xFFFFFF로 다시 자동클릭을 꺼도 되겠습니다..)

 

2. SaveAs의 Path파라미터는 소문자, path입니다ㅜ

오토메이션API의 SaveAs의 파라미터는 Path인데,

pyhwpx.Hwp의 SaveAs 파라미터는 path입니다. (P가 소문자예요.)

 

해결방법은 Path=... 부분을 path=으로 바꾸시거나,

아예 파라미터명을 쓰지 않는 것입니다.

hwp.SaveAs(os.path.join(os.path.dirname(save_path_문제지), 파일이름 + ".pdf"), "PDF")

마찬가지로 Format 파라미터도 format으로 바뀌어 있습니다.

당시에는 소문자 파라미터가 파이썬스럽다고 생각해서 바꾼 건데,
사용자 분들이 많이 어려워하시는 것 같습니다.
근데, 이 모듈로 솔루션을 구축하신 분들이 계셔서ㅜ
지금와선 바꾸기도 어렵고... 그런 상태입니다.

사용하시는 IDE에 따라, 괄호 안에서 Ctrl- PCtrl- Space 등을 눌러 자동완성해보시면

파라미터 목록이 보일 것입니다.

녹화_2024_08_06_12_14_58_876.gif

파이참 기준으로 순서대로

① 메서드 위에서 Ctrl-Q,

② 괄호 안에서 Ctrl-P,

③ 괄호 안에서 Ctrl-Space를 누른 상태입니다.

 

도움이 되었길 바랍니다^^;

행복한 하루 되세요!!!

윤병현님의 프로필 이미지
윤병현
질문자

아하~~ 너무나 명쾌합니다... 오래간 한 분야에 몰입하셔서 얻은 지식을 이렇게 쉽게 학습할수 있게 해주셔서 진심으로 감사합니다. 덕분에 저는 더 효율적으로 일하면서 일에서 행복을 찾고 있습니다. 일코님도 행복한 하루되세요.

윤병현님의 프로필 이미지
윤병현

작성한 질문수

질문하기