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

[QnA] 문서 자동교정 프로그램 만들기

by 일코 2023. 1. 13.
반응형
안녕하세요! 일상의 코딩님!

매번 올려주신 영상 유용하게 보고 있는 구독자입니다! 다름이 아니라, 코딩님 블로그를 보니 한글에서 메일머지기능과 매크로를 이용한 여러 단어 찾아바꾸기 자동교정하는 법 올려주셨더라구요...!

ㅎㅎ 어깨와 팔의 심신이 고달픈 차에 좋은 정보를 알게 되어 매크로 함수를 카피해서 적용을 해보려고 했는데...이 분야가 생소해서 글이 잘 이해가 안가더라구요...하하 물론...오류를 내고... 적용엔 실패했습니다...ㅠㅠ

혹시 언제 시간나실 때! 채널에 적용 방법 공유해주시면 좋을 것 같아서 댓글 남겨봅니다! 한글을 이용한 문서 편집자들에겐 참 좋은 정보가 될 것 같아서요! ㅎㅎ 항상 좋은 정보 감사드리고 2023년 복 많이 받으세요!!!

우선 실습을 진행하기 위한 파일을 다운받아주세요.

오빠는_아무_것도_몰라.zip
0.02MB

압축을 해제해보시면 엑셀파일 한 개, 한/글 파일 한 개가 있습니다.

첨부한 엑셀파일을 열어보면 아래와 같은 내용입니다. 교정표입니다.

교정할 단어 리스트입니다.

첨부한 한/글 파일은 우리가 교정하고자 하는 문서입니다.

이번에 만들어볼 문서교정 프로그램은,

이름은 거창하지만 사실 간단한 프로그램입니다.

엑셀파일의 교정표를 파이썬으로 불러온 후에

바로 한/글의 "찾아바꾸기"를 반복실행해서 교정표에 해당하는 모든 단어를 수정하는 프로그램입니다.

이를 위해서 크게 아래의 세 가지 과정으로 나누어 파이썬 코드작성을 진행해보겠습니다.

1. 엑셀과 한/글을 열고 해당 파일을 불러온다.

2. 엑셀 교정표 내용을 사전(dict) 자료형으로 파이썬으로 가져온다.

3. 교정표(dict)의 아이템을 가지고 순차적으로 한/글 찾아바꾸기 기능에 적용한다.

 

그럼 첫 번째 단계부터 시작해보겠습니다.

1~2. 엑셀과 한/글을 파이썬으로 열고 파일 불러온 후, dict자료형 만들기

아래 영상에서는 (너무 끊기는 느낌이 있어) 2번 과정까지 한 번에 진행했습니다.

위 영상에서 작성한 코드는 아래와 같습니다.

import win32com.client as win32

# 엑셀 실행
excel = win32.gencache.EnsureDispatch("Excel.Application")
excel.Visible = True
wb = excel.Workbooks.Open(r"C:\Users\smj02\Desktop\오빠는_아무_것도_몰라\교정리스트.xlsx")
ws = wb.Worksheets(1)

data = ws.UsedRange()[1:]
data = {i: j for (i, j) in data}

hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.Open(r"C:\Users\smj02\Desktop\오빠는_아무_것도_몰라\오빠는_아무_것도_몰라.hwp")

 

3. 교정표(dict)를 통해 한/글 찾아바꾸기 실행

위 영상에서 작성한 코드는 아래와 같습니다.

경미한 보정을 하였습니다.
import os
import win32com.client as win32

# 엑셀 실행
excel = win32.gencache.EnsureDispatch("Excel.Application")
excel.Visible = True
# wb = excel.Workbooks.Open(r"C:\Users\smj02\Desktop\오빠는_아무_것도_몰라\교정리스트.xlsx")
wb = excel.Workbooks.Open(os.path.join(os.getcwd(), "교정리스트.xlsx"))
ws = wb.Worksheets(1)


# 엑셀 데이터 추출 및 사전형으로 변환
data = ws.UsedRange()[1:]
data = {i: j for (i, j) in data}


# 엑셀 종료
excel.Quit()


# 한/글 실행
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Item(0).Visible = True
# hwp.Open(r"C:\Users\smj02\Desktop\오빠는_아무_것도_몰라\오빠는_아무_것도_몰라.hwp")
hwp.Open(os.path.join(os.getcwd(), "오빠는_아무_것도_몰라.hwp"))


# 자동교정 매크로를 파이썬 함수로 정의
def 자동교정(target):
    hwp.HAction.GetDefault("AllReplace", hwp.HParameterSet.HFindReplace.HSet)
    hwp.HParameterSet.HFindReplace.Direction = hwp.FindDir("AllDoc")
    hwp.HParameterSet.HFindReplace.FindString = target
    hwp.HParameterSet.HFindReplace.ReplaceString = data[target]
    hwp.HParameterSet.HFindReplace.ReplaceMode = 1
    hwp.HParameterSet.HFindReplace.IgnoreMessage = 1
    hwp.HParameterSet.HFindReplace.FindType = 1
    hwp.HAction.Execute("AllReplace", hwp.HParameterSet.HFindReplace.HSet)


# 한/글 문서 자동교정 실행
for i in data.keys():
    자동교정(i)

 

4. 파일선택 다이얼로그 창 붙여보기

일일이 코드의 파일경로를 수정하면서 프로그램 쓰기 귀찮으니까

프로그램 시작할 때 엑셀파일 교정표와 한/글 문서를 고를 수 있게

파일선택 다이얼로그를 붙여보았습니다.

코드 구조까지 조금 보완하여 완성한 코드는 아래와 같습니다.

import os
import tkinter as tk
from tkinter.filedialog import askopenfilename

import win32com.client as win32


def 엑셀실행(filepath):
    excel = win32.gencache.EnsureDispatch("Excel.Application")
    excel.Visible = True
    wb = excel.Workbooks.Open(filepath)
    ws = wb.Worksheets(1)
    return excel, wb, ws


def 사전형변환(data):
    data = {i: j for (i, j) in data[1:]}
    return data


def 엑셀종료():
    excel.Quit()


def 한글실행(filepath):
    hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
    hwp.XHwpWindows.Item(0).Visible = True
    hwp.Open(filepath)
    return hwp


def 자동교정(target):
    hwp.HAction.GetDefault("AllReplace", hwp.HParameterSet.HFindReplace.HSet)
    hwp.HParameterSet.HFindReplace.Direction = hwp.FindDir("AllDoc")
    hwp.HParameterSet.HFindReplace.FindString = target
    hwp.HParameterSet.HFindReplace.ReplaceString = 엑셀데이터[target]
    hwp.HParameterSet.HFindReplace.ReplaceMode = 1
    hwp.HParameterSet.HFindReplace.IgnoreMessage = 1
    hwp.HParameterSet.HFindReplace.FindType = 1
    hwp.HAction.Execute("AllReplace", hwp.HParameterSet.HFindReplace.HSet)


def 일괄교정(data):
    for i in data.keys():
        자동교정(i)


if __name__ == '__main__':
    root = tk.Tk()  # GUI 실행하고
    root.withdraw()  # GUI 콘솔창 안나타나게
    엑셀파일_경로 = askopenfilename(title="교정표 엑셀 파일을 선택해주세요.",
                              initialdir=os.getcwd(),
                              filetypes=[("엑셀파일", "*.xls *.xlsx *.hcell")])

    한글파일_경로 = askopenfilename(title="교정한 한/글 파일을 선택해주세요.",
                              initialdir=os.getcwd(),
                              filetypes=[("아래아한글파일", "*.hwp *.hwpx")])
    root.destroy()  # GUI 종료

    excel, wb, ws = 엑셀실행(엑셀파일_경로)
    엑셀데이터 = 사전형변환(ws.UsedRange())
    엑셀종료()

    hwp = 한글실행(한글파일_경로)
    일괄교정(엑셀데이터)

아래는 실행화면입니다.

 

최종 실행화면

컴파일한 프로그램과 소스코드, 샘플파일을 첨부합니다.

오빠는_아무_것도_몰라.zip
12.85MB

사용법은 동일한 폴더 안에 문서교정표 엑셀파일과, 교정할 문서를 함께 넣고

"문서교정기.exe" 파일을 실행하면 됩니다.

유용하게 사용해 주시기 바랍니다.

행복한 하루 되세요!

 

반응형

댓글0