아래한글로 된 문서 세트에서 일괄 단어를 변경해야 하는 일이 생겼습니다.
하여, 파이썬으로 특정 폴더밑에 존재하는 아래한글 파일들 전체를 대상으로,
아래한글 문서내 단어들을 일괄변경하는 프로그램을 만들어 적용해 보았습니다.
문서가 몇 개 안 될 때에는 직접 하는 것이 더 빠르겠지만 문서 종류가 많고 이런 변경작업이 자주 발생 할 때에는 이 프로그램이 쓸모가 있을 것 같네요.
여기에서 아래한글을 조작하는 자세한 코딩법을 모르니 이건 아래한글 스크립트 매크로 기능을 이용하여 코딩에 활용하였습니다. 저같이 아래한글을 잘 모르는 경우는 참 다행인 것 같습니다.
아래한글 반복작업을 수행하는 스크립트 매크로 만들기
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)
오늘도 수고 많으셨습니다. ^^
'IT잡학사전 > Python HTML etc' 카테고리의 다른 글
| 주피터노트북(Jupyter Notebook) 기본 폴더 변경 법 (0) | 2023.09.05 | 
|---|---|
| 파이썬을 클래스다이어그램으로 Reversing-Pynsource 무료SW (0) | 2023.07.24 | 
| HTML coding 코딩 실습 - 목록만들기 list, ul, ol, li .. (#3) (0) | 2023.01.07 | 
| HTML coding 코딩 실습 - form, input, select, textarea .. (0) | 2023.01.07 | 


										
									
										
									
										
									
										
									
댓글