본문 바로가기
  • 데이터야 놀자
IT잡학사전/Python HTML etc

아래한글 스크립트 매크로 (파이썬으로 아래한글 단어 일괄변경)

by 데이터랑 2023. 11. 28.
728x90

 

아래한글로 된 문서 세트에서 일괄 단어를 변경해야 하는 일이 생겼습니다.

하여, 파이썬으로 특정 폴더밑에 존재하는 아래한글 파일들 전체를 대상으로,

아래한글 문서내 단어들을 일괄변경하는 프로그램을 만들어 적용해 보았습니다.

 

문서가 몇 개 안 될 때에는 직접 하는 것이 더 빠르겠지만 문서 종류가 많고 이런 변경작업이 자주 발생 할 때에는 이 프로그램이 쓸모가 있을 것 같네요.

 

여기에서 아래한글을 조작하는 자세한 코딩법을 모르니 이건 아래한글 스크립트 매크로 기능을 이용하여 코딩에 활용하였습니다.  저같이 아래한글을 잘 모르는 경우는 참 다행인 것 같습니다.

 

아래한글 반복작업을 수행하는 스크립트 매크로 만들기

 

 

1. 스크립트 매크로 보안설정

도구 -> 스크립트매크로 -> 매크로 보안설정  선택 클릭

스키립트매크로

 

 

낮음으로 선택하고 설정 클릭

스크립트 매크로 보안설정

 

 

 

2. 스크립트 매크로 정의

도구 -> 스크립트매크로 -> 매크로 정의  선택 

정의할 매크로 목록에서 아무거나 빈것을 선택-> 이름 정하고 -> 정의 버튼 클릭하고

 

 

스크립트매크로 정의

 

이제부터 반복하고자 하는 작업을 아래한글에서 다 수행한 후

화면 아래 하단에서 기록중지버튼을 클릭하면 아래한글 내 매크로가 정의됨

 

매크로 기록 및 중지

 

3. 스크립트 매크로 실행

나중에 이 작업을 아래한글에서 수행하고자 한다면

도구-> 스크립트매크로 -> 매크로실행 -> 매크로 선택 -> 실행버튼 클릭

 

 

 

 

 

파이썬에서 아래한글 매크로 삽입

 

 

1. 스크립트 매크로 코드편집에서 코드 복사

 

 

2. 파이썬용 코드로 수정 

파이썬에서 사용하기 위해서 복사한 스크립트를 파이썬용으로 수정

아래코딩에서  본분_찾아바꾸기가 아래한글에서 복사해 온 부분입니다.

( 예: function 대신 def로 변경,...)

 

3. 파이썬 코드

  • 작업대상 폴더를 선택
  • 하위 폴더를 계속 반복하며 아래한글 문서를 Open
  • Open한 아래한글 문서에서프로그램에서 정의된 수정단어목록 대상들을 일괄변경 하는 프로그램 입니다.
# ####################################
##  아래한글파일 단어 일괄변경하기
#######################################
import os  # 파일과 폴더이름을 다루기 편한 모듈
from tkinter import Tk  #    
from tkinter import filedialog ## 파일선택 GUI
import win32com.client as win32
import gc  ###  메모리 정리
def get_directory():            # 디렉토리를 선택하는 탐색기 띄워 디렉토리 경로 가져오기
    # 파일 선택 대화 상자를 엽니다.
    root = Tk()
    root.withdraw()
    directory = filedialog.askdirectory()
    root.destroy()
    return directory

def 수정단어목록():
    # 수정할 단어목록을 정의합니다
    
    수정단어들 =  {
     '올드1 ': '신규1',
     '올드2 ': '신규2',
		.....
     '올드n ': '신규n'
              }
    return 수정단어들.items()


def 한글_열기(한글파일, visible=True):
    한글 = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
    한글.XHwpWindows.Item(0).Visible = visible
    한글.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")
    한글.Open(한글파일)
    return 한글


def 본문_찾아바꾸기(Old_word, New_word):
    한글.HAction.GetDefault("AllReplace", 한글.HParameterSet.HFindReplace.HSet)
    한글.HParameterSet.HFindReplace.AutoSpell = 1
    한글.HParameterSet.HFindReplace.Direction = 한글.FindDir("AllDoc")
    한글.HParameterSet.HFindReplace.FindString = Old_word
    한글.HParameterSet.HFindReplace.ReplaceString =  New_word
    한글.HParameterSet.HFindReplace.ReplaceMode = 1
    한글.HParameterSet.HFindReplace.IgnoreMessage = 1
    한글.HParameterSet.HFindReplace.FindType = 1
    한글.HAction.Execute("AllReplace", 한글.HParameterSet.HFindReplace.HSet)

if __name__ == '__main__':
    # root = Tk()  # GUI 실행하고
    dir_path = None
    file_cnt = 0		##  파일갯수 체크용
    
    # 디렉토리를 선택합니다.
    dir_path = get_directory()

    수정단어들 = 수정단어목록()

    for (root, directories, files) in os.walk(dir_path):
        dirlength = len(root)
        dirlastname = root[root.rfind('\\') + 1:dirlength]  # 최종폴더명만 get해서 대상 폴더만 filtering


        for file in files:

            try:
                # if file_cnt > 2:        ####  !!!!!  테스트를 위해 일부 결과보기위한 문장입니당~###########
                #     continue
                file_path = os.path.join(root, file)
                print(directories, file_path)

                if file.find('.hwp') > 0:    ### 원하는  파일타입 지정
                    pass
                else:
                    continue

                file_cnt = file_cnt + 1

                한글 = 한글_열기( file_path)
                
                for ii, jj in 수정단어들:
                    본문_찾아바꾸기(ii, jj)
                    
                한글.SaveAs(file_path)
                
                # 한글 종료
                한글.Quit()

            except Exception as e:
                print(f"Error processing file {file_path}: {str(e)}")
                continue
        gc.collect()
    print("파일수 : ", file_cnt)

 

 

오늘도 수고 많으셨습니다. ^^

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
728x90

댓글