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

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

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

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

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

예를 들어.

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)

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

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

1개의 좋아요

안녕하세요ㅎ

아무 파라미터셋도 주지 않고 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개의 좋아요

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

1개의 좋아요

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

  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_ 가급적 파라미터셋 속성을 변수에 담아서 코드를 짜시는 걸 추천드립니다.

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

2개의 좋아요