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

[QnA] 글상자 내용을 밖으로 꺼내기

by 일코 2023. 1. 27.
안녕하세요. 특정 디렉토리의 여러 hwp 파일 안에 있는 텍스트 상자의 텍스트를 Ctrl + A로 전체복사해서 골라 붙이기 한 후 저장하는 행위를 일괄적으로 수행하는 프로그램을 짜고 있는데(https://hyyoka-ling-nlp.tistory.com/7 위 게시글을 참고했습니다.)
계속
Error opening (-2147417851, '서버에서 예외 오류가 발생했습니다.', None, None) 혹은
Error opening (-2147023170, '원격 프로시저를 호출하지 못했습니다.', None, None) 혹은
Error opening (-2147023174, 'RPC 서버를 사용할 수 없습니다.', None, None)
과 같은 오류가 아무리 구글링해서 나오는 해결책을 써봐도 해결이 되지 않아서 무엇이 원인이고 어떻게 해결해야할 지 혹시 일코님께 자문을 구할 수 있을지 해서 이렇게 방명록에 글을 남기게 되었습니다.
개선해서 수행한 코드는 아래와 같습니다.

import os
import win32com.client as win32
import time

pathlist = ["C:/Users/natio/anaconda3/Scripts/seoul/basic"]
res = []
for path in pathlist:
    for root, dirs, files in os.walk(path):
        rootpath = os.path.join(os.path.abspath(path), root)
        for file in files:
            filepath = os.path.join(rootpath, file)
            if filepath.endswith('.hwp'):
                res.append(filepath)

hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")
for path in res:
    if not filepath.endswith('.hwp'):
        continue
    try:
        hwp.Open(path, "HWP", "forceopen:true")
        hwp.Run("SelectAll")
        hwp.Run("Copy")
        hwp.Run("Erase")
        hwp.Run("PasteSpecial")
        hwp.Run("Cancel")
        hwp.Save()
        hwp.Quit()
    except Exception as e:
        if e.args[0] == -2147023174:
        print(f"RPC server not available for {path}")

 

오류의 원인

골라붙여넣기의 "text" 옵션을 선택하지 않은 채로
팝업이 열려 있는 상태에서 Cancel 이후의 명령어를 실행하셔서 발생하는 오류입니다.

참고하신 블로거 분이 어느 버전을 사용하셨는지는 모르겠지만,
저도 저 코드를 실행했을 때에는 한줄기빛님과 동일한 오류가 발생하네요.

대신 아래 코드로 실행해 보시기 바랍니다.

기존 코드에 비해 다소 복잡해 보이지만
글자서식이나 스타일도 유지되는
괜찮은 방법입니다.

import win32com.client as win32

hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Item(0).Visible = True
hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")

hwp.Open(r"C:\Users\smj02\Desktop\글상자.hwpx")

ctrl = hwp.HeadCtrl
while ctrl:
    if ctrl.UserDesc == "사각형":
        hwp.SetPosBySet(ctrl.GetAnchorPos(0))
        hwp.FindCtrl()
        hwp.Run("ShapeObjTextBoxEdit")
        hwp.Run("SelectAll")
        hwp.Run("Cut")
        hwp.DeleteCtrl(ctrl)
        hwp.Run("Paste")
    ctrl = ctrl.Next

hwp.Save()
hwp.Quit()

실행화면은 아래와 같습니다.

샘플문서

글상자.hwpx
0.03MB

추가로 궁금한 점이 있으면 댓글 남겨주시기 바랍니다.

방명록 남겨주셔서 감사합니다.
행복한 하루 되세요!

일코 드림


 

 

움짤로 빠르게 배우는 파이썬-아래아한글 자동화 레시피 - 인프런 | 강의

파이썬으로 아래아한글을 다루는 짧은 예제코드들을 소개하고, 중간중간의 결과를 GIF로 보여드립니다. 동영상 강의가 아니지만 오히려 빠르게 배울 수 있고, 따라하기도 쉽습니다., - 강의 소개

www.inflearn.com

 

댓글