해결된 질문
작성
·
44
1
답변 1
1
용준님 안녕하세요?
①
new=True가 씹히는 문제가 있었네요ㅜ
아마 내부적으로 win32gui가 한/글 창을 찾는 과정에서
스레드가 꼬이는 지점이 있나봅니다.
조만간 원인을 찾아서 수정을 해 두겠습니다.
②
참고로 hwp = Hwp()는 사전작업이 많아 상당히 무거운 코드이므로
반복에는 가급적 사용하지 말아주세요.
hwp = Hwp(new=True)는 새 창을 여는 옵션이라기보다는,
기존에 열어놓은 문서를 건드리지 않고 파이썬용 한/글 창을 하나 만들기 위함이었습니다.
한/글을 파이썬과 최초로 연결하시고 난 후에는 hwp = Hwp(new=True) 대신,
hwp.FileNew()나 hwp.FileNewTab() 등의 메서드를 활용하시는 걸 추천드립니다.
FileNew()나 FileNewTab()을 쓰시면 상기하신 오류는 발생하지 않을 것으로 생각합니다.
③
마지막으로 모든 한/글 창을 닫는 메서드는 pyhwpx에서 제공하고 있지는 않지만,
간단히 아래와 같은 함수를 짜서 활용하시면 될 듯 합니다.
import win32com.client as win32
import pythoncom
def close_all_hwp(save=False):
context = pythoncom.CreateBindCtx(0)
running_coms = pythoncom.GetRunningObjectTable()
monikers = running_coms.EnumRunning()
for moniker in monikers:
name = moniker.GetDisplayName(context, moniker)
if name.startswith('!HwpObject.'):
obj = running_coms.GetObject(moniker)
hwp = win32.gencache.EnsureDispatch(obj.QueryInterface(pythoncom.IID_IDispatch))
if save and hwp.Path: # 빈 문서가 아니면서 변경사항이 있는 경우 저장
hwp.XHwpDocuments.Active_XHwpDocument.Clear(option=2)
else: # 그 외 버림
hwp.XHwpDocuments.Active_XHwpDocument.Clear(option=1)
hwp.Quit()
도움이 되었길 바랍니다.
행복한 하루 되세요^^