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

한/글 문서의 단순교정 매크로를 메일머지로!!??

by 일코 2022. 1. 31.

원문 출처는 폴리텍대학 서울강서캠퍼스 출판디자인과 | 아래한글 단순 교정 매크로 - Daum 카페

 

아래한글 단순 교정 매크로

단순 교정 매크로 작성 방법에 대하여 !--[if !supportEmptyParas]--!--[endif]-- 교정 업무를 진행하다 보면, 교정자의 판단이 필요 없이 무조건 일괄 변환시켜도 무방한 형태의 사례가 있습니다. 이를테면

cafe.daum.net

 

위와 같은 작업을 파이썬으로 간단히 처리해 보려고 합니다.

 


그 전에 원저자 분의 아이디어부터 한 번 검토해봅시다.

원문을 자세히 읽어보시면 짐작하시겠지만,

한/글 스크립트 자체에서는 엑셀파일과의 연동이 까다롭다고 생각하신

원저자 분께서 굉장히 신박한 방법을 하나 생각해 냅니다.

그것은 바로,

"메일머지"로 "스크립트를 복제" 하는 방법이었습니다.

이 방법과 관련해서 질문 주신 분도 계셨고요.

 

 

엑셀파일은 아래와 같이 작성되어 있고

교정자 검토 필요없이 일괄변환해도 되는 어휘들 모음(예시)

 

해당 문구를 차례대로 전부 "찾아바꾸기"를 하고 싶은데,

여러분도 아시다시피 "찾아바꾸기"는 딱 하나의 어휘로만 실행되기 때문에

찾아바꾸기를 여러 번 해야 합니다.

별도의 툴 없이

한/글만 가지고 이런 일괄작업을 자동화하는 유일한 방법은

스크립트를 메일머지로 만들어내는 방법일 거라고 생각합니다.

 

이해가 안 되시는 분은 아래 이미지를 한 번 봐 주시기 바랍니다.

기본적인 찾아바꾸기 스크립트입니다.

(스크립트 창이 아닌 한/글 문서창에 복사해놓았습니다.)

기본적인 "찾아바꾸기" 스크립트

 

위에서는 함수제목과 중괄호 하나를 삭제하고, 아래에는 닫는 중괄호 하나를 삭제한 후에.

{{처음말}}, {{바꿀말}} 을 메일머지로 변경해줍니다.

 

그리고 소스는 아래의 엑셀파일입니다.

메일머지 데이터파일

 

아래처럼 메일머지를 실행해줍니다.

결과파일을 열어보니, 레코드 수만큼 스크립트가 복사되었습니다.

 

메일머지 결과는 아래와 같습니다.

메일머지 결과

 

이제 이 스크립트를 조금 다듬고, 서식을 손 좀 보았습니다.

아래의 코드가 최종입니다.

function OnScriptMacro_script1() {
    HAction.GetDefault("AllReplace", HParameterSet.HFindReplace.HSet);
    with (HParameterSet.HFindReplace) {
        Direction = FindDir("AllDoc");
        FindString = "아무 것";
        ReplaceString = "아무것";
        ReplaceCharShape.ShadeColor = RGBColor(217, 217, 9);
        ReplaceMode = 1;
        IgnoreMessage = 1;
        FindType = 1;
    }
    HAction.Execute("AllReplace", HParameterSet.HFindReplace.HSet);
    
    HAction.GetDefault("AllReplace", HParameterSet.HFindReplace.HSet);
    with (HParameterSet.HFindReplace) {
        Direction = FindDir("AllDoc");
        FindString = "알아 주";
        ReplaceString = "알아주";
        ReplaceCharShape.ShadeColor = RGBColor(217, 217, 9);
        ReplaceMode = 1;
        IgnoreMessage = 1;
        FindType = 1;
    }
    HAction.Execute("AllReplace", HParameterSet.HFindReplace.HSet);
    
    HAction.GetDefault("AllReplace", HParameterSet.HFindReplace.HSet);
    with (HParameterSet.HFindReplace) {
        Direction = FindDir("AllDoc");
        FindString = "알아 줘";
        ReplaceString = "알아줘";
        ReplaceCharShape.ShadeColor = RGBColor(217, 217, 9);
        ReplaceMode = 1;
        IgnoreMessage = 1;
        FindType = 1;
    }
    HAction.Execute("AllReplace", HParameterSet.HFindReplace.HSet);
    
    HAction.GetDefault("AllReplace", HParameterSet.HFindReplace.HSet);
    with (HParameterSet.HFindReplace) {
        Direction = FindDir("AllDoc");
        FindString = "알아 줬";
        ReplaceString = "알아줬";
        ReplaceCharShape.ShadeColor = RGBColor(217, 217, 9);
        ReplaceMode = 1;
        IgnoreMessage = 1;
        FindType = 1;
    }
    HAction.Execute("AllReplace", HParameterSet.HFindReplace.HSet);
    
    HAction.GetDefault("AllReplace", HParameterSet.HFindReplace.HSet);
    with (HParameterSet.HFindReplace) {
        Direction = FindDir("AllDoc");
        FindString = "알아 줄";
        ReplaceString = "알아줄";
        ReplaceCharShape.ShadeColor = RGBColor(217, 217, 9);
        ReplaceMode = 1;
        IgnoreMessage = 1;
        FindType = 1;
    }
    HAction.Execute("AllReplace", HParameterSet.HFindReplace.HSet);

    HAction.GetDefault("AllReplace", HParameterSet.HFindReplace.HSet);
    with (HParameterSet.HFindReplace) {
        Direction = FindDir("AllDoc");
        FindString = "필요없";
        ReplaceString = "필요 없";
        ReplaceCharShape.ShadeColor = RGBColor(217, 217, 9);
        ReplaceMode = 1;
        IgnoreMessage = 1;
        FindType = 1;
    }
    HAction.Execute("AllReplace", HParameterSet.HFindReplace.HSet);
}

 

분량이 긴 것 같지만, 메일머지로 복사한 분량을 전부 담아보았습니다. 양해 바랍니다.

 

위의 스크립트를 전체선택한 후 복사해서

한/글 스크립트 창에 붙여넣고 실행해보겠습니다.

짜잔!

끝.

 

마치며

찾아바꾸기를 여러 번 실행하는 방법은

(저는 파이썬에 익숙하니까) 단순히 스크립트를 for문 안에 넣고 돌리면 된다고 생각했는데,

이걸 아래아한글 하나만 가지고 엑셀파일과 연동하면서

모든 어휘에 대해 찾아바꾸기를 하는 방법이 있을 거라고는 상상조차 하지 못했습니다.

그 도구로 메일머지를 활용하는 것도 제 수준으로는 생각해내지 못할 방법이었을 것 같습니다.

원저자 분께 심심한 경의를 표합니다.

 

 

포스팅이 길어져서,

위와 같은 과정 없이 파이썬으로 (더욱 간단히) 처리하는 방법은

다음 포스팅에 이어서 소개를 드려야겠습니다.

2022.02.01 - [업무자동화/파이썬-아래아한글 자동화 기초] - [최종]아래아한글 문서교정 기능을 파이썬으로 구현해보기

 

행복한 하루 되세요!!!

댓글