질문주신 내용은,
안녕하세요. 포스팅 해주신 내용이 제 업무에 엄청나게 도움이 될 내용이어서 정말로 감사드립니다. (주로 필요할때마다 한글매크로 만들어서 사용중입니다) 첫번째로 말씀해주신 방법(매크로 코드를 파이썬으로 옮겨서 중괄호, 세미콜론 등 지우고 hwp. 붙여주는 방법)으로 시도중인데요 다음 코드(한글 매크로 코드편집 내용)에서 ***로 표시한 부분을 파이썬에서 어떻게 바꿔야 할 지 모르겠어서 여쭤봅니다. 혹시나 시간 편하실때로 답변주시면 정말로 감사드리겠습니다. 아래 매크로 코드 내용은 '마침표를 찾아서 엔터(=문단끝) 두번 입력' 입니다.
{
HAction.GetDefault("FindDlg", HParameterSet.HFindReplace.HSet);
with (HParameterSet.HFindReplace)
{
}
HAction.Execute("FindDlg", HParameterSet.HFindReplace.HSet);
HAction.GetDefault("RepeatFind", HParameterSet.HFindReplace.HSet);
***with (HParameterSet.HFindReplace)
{
ReplaceString = "";
FindString = ".";
IgnoreReplaceString = 0;
IgnoreFindString = 0;
Direction = FindDir("Forward");
WholeWordOnly = 0;
UseWildCards = 0;
SeveralWords = 0;
AllWordForms = 0;
MatchCase = 0;
ReplaceMode = 0;
ReplaceStyle = "";
FindStyle = "";
FindRegExp = 0;
FindJaso = 0;
HanjaFromHangul = 0;
IgnoreMessage = 1;
FindType = 1;
}***
HAction.Execute("RepeatFind", HParameterSet.HFindReplace.HSet);
HAction.Run("Cancel");
HAction.Run("MoveRight");
HAction.Run("BreakPara");
HAction.Run("BreakPara");
}
답변
아래아한글 매크로에서 with 컨텍스트는 반복되는 접두어(?)를 축약할 수 있는 문법입니다. (파이썬에도 with 문법이 있지만 용도가 다릅니다.)
하여튼 아래의 아래아한글 매크로 코드는,
with (HParameterSet.HFindReplace)
{
ReplaceString = "";
FindString = ".";
IgnoreReplaceString = 0;
}
아래처럼 수정할 수 있습니다.
HParameterSet.HFindReplace.ReplaceString = "";
HParameterSet.HFindReplace.FindString = ".";
HParameterSet.HFindReplace.IgnoreReplaceString = 0;
질문 주신 전체 코드를 파이썬으로 바꿔보면 아래와 같습니다.
import win32com.client as win32
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Item(0).Visible = True
hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet)
hwp.HParameterSet.HFindReplace.ReplaceString = ""
hwp.HParameterSet.HFindReplace.FindString = "."
hwp.HParameterSet.HFindReplace.IgnoreReplaceString = 0
hwp.HParameterSet.HFindReplace.IgnoreFindString = 0
hwp.HParameterSet.HFindReplace.Direction = hwp.FindDir("Forward")
hwp.HParameterSet.HFindReplace.WholeWordOnly = 0
hwp.HParameterSet.HFindReplace.UseWildCards = 0
hwp.HParameterSet.HFindReplace.SeveralWords = 0
hwp.HParameterSet.HFindReplace.AllWordForms = 0
hwp.HParameterSet.HFindReplace.MatchCase = 0
hwp.HParameterSet.HFindReplace.ReplaceMode = 0
hwp.HParameterSet.HFindReplace.ReplaceStyle = ""
hwp.HParameterSet.HFindReplace.FindStyle = ""
hwp.HParameterSet.HFindReplace.FindRegExp = 0
hwp.HParameterSet.HFindReplace.FindJaso = 0
hwp.HParameterSet.HFindReplace.HanjaFromHangul = 0
hwp.HParameterSet.HFindReplace.IgnoreMessage = 1
hwp.HParameterSet.HFindReplace.FindType = 1
hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet)
hwp.HAction.Run("Cancel")
hwp.HAction.Run("MoveRight")
hwp.HAction.Run("BreakPara")
hwp.HAction.Run("BreakPara")
남겨주신 질문에 대한 답은 다 해 드린 것 같...지만 몇 가지 첨언을 더 드리면, (오지랖이 아닌가 걱정이ㅜ)
우선 위의 코드는 여러 번 실행해야 할 경우 실행을 반복입력해야 하는 번거로움(?)이 있습니다. 이걸 문서 전체에 단번에 적용하시려면 아래처럼만 실행하셔도 됩니다.
hwp.HAction.GetDefault("AllReplace", hwp.HParameterSet.HFindReplace.HSet)
hwp.HParameterSet.HFindReplace.AutoSpell = 1
hwp.HParameterSet.HFindReplace.Direction = hwp.FindDir("Forward")
hwp.HParameterSet.HFindReplace.FindString = "."
hwp.HParameterSet.HFindReplace.ReplaceString = ".^n^n" # "^n"이 줄바꿈.
hwp.HParameterSet.HFindReplace.ReplaceMode = 1
hwp.HParameterSet.HFindReplace.IgnoreMessage = 1
hwp.HParameterSet.HFindReplace.FindType = 1
hwp.HAction.Execute("AllReplace", hwp.HParameterSet.HFindReplace.HSet)
전체 찾아바꾸기와 ^n을 활용한 코드입니다.
마지막으로,
선택범위 안에서만 바꾸기를 한다든지, 온점 뒤에 엔터가 있는 경우에는 엔터를 붙이지 않는다든지 하는 별도의 조건을 거는 것도, 파이썬에서는 제법 간단합니다. (아래아한글 매크로만 가지고 구현하기는 어렵습니다.)
자주 질문 주시기 바랍니다.
행복한 하루 되세요!^^
참고하면 도움이 될... 것도 같은 포스팅
5. 특정단어 포함한 문장 전체의 서식 바꾸기, 가능할까? (tistory.com)
[파이썬-한/글 자동화] 한/글파일로 정규식 찾아바꾸기(re) (tistory.com)
댓글