찾아바꾸기 혹은 찾기의 글자 서식 초기화

파이썬에서 자동화를 하고 있습니다.

특정 글자 서식을 찾아서 붉은 색으로 변경하는 걸 해보고 있는데요.

문제는 이게 한 서식을 찾아서 바꾼 다음에는 초기화가 되지 않습니다.

그래서 서식 없는 글자만 검색하는게 안되게 됩니다.

예를 들어.

action = hwp.CreateAction("RepeatFind")
action.GetDefault(hwp.HParameterSet.HFindReplace.HSet)
hwp.HParameterSet.HFindReplace.FindCharShape.FaceNameHangul = "돋움"
hwp.HParameterSet.HFindReplace.FindCharShape.FaceNameLatin = "돋움"
hwp.HParameterSet.HFindReplace.FindCharShape.FaceNameHanja = "돋움"
hwp.HParameterSet.HFindReplace.FindCharShape.FaceNameJapanese = "돋움"
hwp.HParameterSet.HFindReplace.FindCharShape.FaceNameOther = "돋움"
hwp.HParameterSet.HFindReplace.FindCharShape.FaceNameSymbol = "돋움"
hwp.HParameterSet.HFindReplace.FindCharShape.FaceNameUser = "돋움"
hwp.HParameterSet.HFindReplace.FindCharShape.FontTypeHangul = 1
hwp.HParameterSet.HFindReplace.FindCharShape.FontTypeLatin = 1
hwp.HParameterSet.HFindReplace.FindCharShape.FontTypeHanja = 1
hwp.HParameterSet.HFindReplace.FindCharShape.FontTypeJapanese = 1
hwp.HParameterSet.HFindReplace.FindCharShape.FontTypeOther = 1
hwp.HParameterSet.HFindReplace.FindCharShape.FontTypeSymbol = 1
hwp.HParameterSet.HFindReplace.FindCharShape.FontTypeUser = 1

action.Execute(hwp.HParameterSet.HFindReplace.HSet)

이렇게 실행을 한번 하면 서식이 없는 이전으로 돌아가지 못합니다.

action = hwp.CreateAction("RepeatFind")
action.GetDefault(hwp.HParameterSet.HFindReplace.HSet)
hwp.HParameterSet.HFindReplace.FindString = "안녕하세요"
action.Execute(hwp.HParameterSet.HFindReplace.HSet)

그리고는 이 코드를 실행하면 글자서식은 초기화가 되지 않아 이전에 설정했던 서식이 반영되게 됩니다.
그래서 찾기를 열어보면 아래와 같이 서식이 지정되어 있음을 알게 됩니다.

저 찾을 글자 모양 지정을 초기화 할 수 있는 방법이 혹시 없나요?

안녕하세요ㅎ

아무 파라미터셋도 주지 않고 Execute를 한 번 실행하시면 일종의 ‘초기화’가 됩니다.

pset = hwp.HParameterSet.HFindReplace
hwp.HAction.GetDefault("FindDlg", pset.HSet)
hwp.HAction.Execute("FindDlg", pset.HSet)

이렇게 한 차례 미리 실행하신 후에,

원하시는 찾기 코드를 실행하시면

의도하신 대로 실행될 것입니다.

참고로, 파이썬의 아래아한글오토메이션 모듈 pyhwpx에도 동일하게 구현되어 있습니다.

아래는 pyhwpxfind메서드입니다. 참고해주시기 바랍니다.

    def find(
            self,
            src: str = "",
            direction: Literal["Forward", "Backward", "AllDoc"] = "Forward",
            regex: bool = False,
            TextColor: Optional[int] = None,
            Height: Optional[int | float] = None,
            MatchCase: int = 1,
            SeveralWords: int = 0,
            UseWildCards: int = 0,
            WholeWordOnly: int = 0,
            AutoSpell: int = 1,
            HanjaFromHangul: int = 1,
            AllWordForms: int = 0,
            FindStyle: str = "",
            ReplaceStyle: str = "",
            FindJaso: int = 0,
            FindType: int = 1,
    ) -> bool:
        """
        direction 방향으로 특정 단어를 찾아가는 메서드.

        해당 단어를 선택한 상태가 되며,
        탐색방향에 src 문자열이 없는 경우 False를 리턴

        Args:
            src: 찾을 단어
            direction:
                탐색방향

                    - "Forward": 아래쪽으로(기본값)
                    - "Backward": 위쪽으로
                    - "AllDoc": 아래쪽 우선으로 찾고 문서끝 도달시 처음으로 돌아감.

            regex: 정규식 탐색(기본값 False)
            TextColor: 글자색(hwp.RGBColor)
            Height: 글자크기(내부에서 hwp.PointToHwpUnit이 적용되므로, 포인트단위로 입력하기)
            MatchCase: 대소문자 구별(기본값 1)
            SeveralWords: 여러 단어 찾기(콤마로 구분하여 or연산 실시, 기본값 0)
            UseWildCards: 아무개 문자(0),
            WholeWordOnly: 온전한 낱말(0),
            AutoSpell: 토씨(조사) 자동 교정(1)
            HanjaFromHangul: 한글로 한자 찾기(1),
            AllWordForms: 문자열 결합=띄어쓰기 무시(1)
            FindStyle: 찾을 글자모양
            ReplaceStyle: 바꿀 글자모양
            FindJaso: 자소 단위 찾기(0),
            FindType: 다시 찾기를 할 때 마지막으로 실행한 찾기[True]를 할 것인가, 찾아가기[False]를 할 것인가의 여부(1)

        Returns:
            단어를 찾으면 찾아가서 선택한 후 True를 리턴,
            단어가 더이상 없으면 False를 리턴
        """
        self.SetMessageBoxMode(0x2FFF1)
        pset = self.hwp.HParameterSet.HFindReplace
        self.hwp.HAction.GetDefault("FindDlg", pset.HSet)
        self.hwp.HAction.Execute("FindDlg", pset.HSet)
        pset = self.hwp.HParameterSet.HFindReplace
        pset.MatchCase = MatchCase
        pset.SeveralWords = SeveralWords
        pset.UseWildCards = UseWildCards
        pset.WholeWordOnly = WholeWordOnly
        pset.AutoSpell = AutoSpell
        pset.Direction = self.FindDir(direction)
        pset.FindString = src
        pset.IgnoreMessage = 0
        pset.HanjaFromHangul = HanjaFromHangul
        pset.AllWordForms = AllWordForms
        pset.FindJaso = FindJaso
        pset.FindStyle = FindStyle
        pset.ReplaceStyle = ReplaceStyle
        pset.FindRegExp = regex
        pset.FindType = FindType
        if TextColor is not None:
            pset.FindCharShape.TextColor = TextColor
        if Height is not None:
            pset.FindCharShape.Height = self.PointToHwpUnit(Height)
        try:
            return self.hwp.HAction.Execute("RepeatFind", pset.HSet)
        finally:
            self.SetMessageBoxMode(0xFFFFF)

대신 초기화 코드를 실행한다고 해서 아래아한글 프로그램상에서 찾을 글자 모양 옵션이 꺼지지는 않습니다.

말씀하신 대로라면 찾을 글자 모양 서식은 초기화가 안된다는 의미로 이해하면 될까요?
말씀하신대로 해도 문제가 해결 되지 않는 거 같아서요.

아래 과정을 따라해보시기 바랍니다.

  1. 초기화 함수 정의
def 초기화():
    action = hwp.CreateAction("FindDlg")
    pset = hwp.HParameterSet.HFindReplace
    hwp.HAction.GetDefault("FindDlg", pset.HSet)
    action.Execute(pset.HSet)
  1. 찾기 1회 실행
action = hwp.CreateAction("RepeatFind")
pset = hwp.HParameterSet.HFindReplace
pset.FindCharShape.FaceNameHangul = "돋움"
pset.FindCharShape.FaceNameLatin = "돋움"
pset.FindCharShape.FaceNameHanja = "돋움"
pset.FindCharShape.FaceNameJapanese = "돋움"
pset.FindCharShape.FaceNameOther = "돋움"
pset.FindCharShape.FaceNameSymbol = "돋움"
pset.FindCharShape.FaceNameUser = "돋움"
pset.FindCharShape.FontTypeHangul = 1
pset.FindCharShape.FontTypeLatin = 1
pset.FindCharShape.FontTypeHanja = 1
pset.FindCharShape.FontTypeJapanese = 1
pset.FindCharShape.FontTypeOther = 1
pset.FindCharShape.FontTypeSymbol = 1
pset.FindCharShape.FontTypeUser = 1
action.Execute(pset.HSet)
  1. 초기화 실행 후 다른 찾기 실행
초기화()

action = hwp.CreateAction("RepeatFind")
pset = hwp.HParameterSet.HFindReplace
pset.FindString = "ㅂㅈㄷㄱ"
action.Execute(pset.HSet)

찾기가 잘 실행될 겁니다.

녹화_2025_09_30_12_23_58_674

중요한 부분은,

1_ 초기화() 이후에는 GetDefault를 실행하지 않아야 한다는 점이며,

2_ 가급적 파라미터셋 속성을 변수에 담아서 코드를 짜시는 걸 추천드립니다.

간혹 변수에 넣지 않고 파라미터셋 속성을 정의할 때 오류가 나는 경우가 있습니다. (예: 표 생성/수정시)