# ExecReplace action 기능 문의

**URL:** <https://forum.developer.hancom.com/t/execreplace-action/1209>\
**Category:** 한글 오토메이션\
**Created:** [12월 28, 2023, 1:21오전 UTC](https://forum.developer.hancom.com/t/execreplace-action/1209 "2023-12-28T01:21:59Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![user81](https://avatars.discourse-cdn.com/v4/letter/u/ba9def/32.png) [@user81](https://forum.developer.hancom.com/u/user81)\
**Post date:** [12월 28, 2023, 1:21오전 UTC](https://forum.developer.hancom.com/t/execreplace-action/1209/1 "2023-12-28T01:21:59Z")

</div>

위 Action 을 사용하는 중 이해가 안되는 부분이 있어 문의 합니다.

Program 은 다음 과정을 반복 합니다.  
그런데 처음 찾은 문구가 수정되고 형광펜이 칠해질 것이라 생각 했는데

첫번째는 찾기만 하고 Action 이 없습니다.  
두번째에 첫번째 찾은 문구에 형광펜만 칠하고 수정이 안되고 다음 문구를 찾는 동작이 동시에 일어납니다.  
(Open 된 문서를 보면서 step by step 으로 debugging 시)

1. ExecReplace
2. MarkPenShape

그래서 다음과 같이 변경했습니다.

1. BackwardFind
2. MarkPenShape

그리고 동일한 file 을 한번더 반복(결국 수정하고 형광펜 칠하는 것이 한번에 안됨)

1. ExecReplace

여기에서 궁금한 점은 Find 후 Exec 하면 왜 바로 수정이 안되고 그 다음에 되는지요 ?  
다음 단계를 반복하면서 처리하는 것이 왜 안되는지요 ?

1. BackwardFind
2. ExecReplace
3. MarkPenShape

---

<div class="post-metadata">

**Author:** ![bhjung](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.developer.hancom.com/bhjung/32/259_2.png) [@bhjung](https://forum.developer.hancom.com/u/bhjung)\
**Post date:** [1월 2, 2024, 5:39오전 UTC](https://forum.developer.hancom.com/t/execreplace-action/1209/2 "2024-01-02T05:39:32Z")

</div>

안녕하세요,  
ExecReplace 액션 실행을 하면 찾은 단어를 바꾼뒤 선택 상태가 유지되지 않기때문에 원하시는 대로 동작 하지 않습니다.  
구현하신대로 바꾼뒤 뒤로 바꾼단어를 찾은다음 처리를 해야할것 같습니다.  
감사합니다 ^^

---

<div class="post-metadata">

**Author:** ![ilco](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.developer.hancom.com/ilco/32/1213_2.png) [@ilco](https://forum.developer.hancom.com/u/ilco)\
**Post date:** [1월 2, 2024, 4:54오후 UTC](https://forum.developer.hancom.com/t/execreplace-action/1209/3 "2024-01-02T16:54:40Z")

</div>

bhjung님께서 답변을 달아주셨는데요, 조금만 첨언드리면  
찾기 또는 찾아바꾸기를 실행할 때,  
캐럿이 어디 위치하고 있는지(찾은 단어 앞에 있는지 뒤에 있는지)를 파악해 두시면  
이후 로직을 짜기 훨씬 수월해지는 것 같습니다.

나아가 “찾아바꾸기” API에 의존하기보다,  
“찾기” 이후 원하시는 작업을 직접 실행하는 방식으로 코드를 짜보시면  
보다 유연하고 직관적으로 처리하실 수 있게 될 것입니다.

예를 들어 "아래 방향"으로 "찾아바꾸기"를 한 번 실행하시면  
첫 번째로 찾은 단어를 "바꾸지 않은 상태"로 "단어 끝"에 캐럿이 위치합니다.  
(이 때문에 API로 “찾아바꾸기” 실행시에는 첫 번째로 찾은 단어의 바꾸기를 건너뛰게 되네요…)  
게다가 "위 방향"으로 찾으시면 단어의 "시작"에 캐럿이 위치합니다.  
이런 API스펙들 때문에 찾기방향을 바꾸면서 액션을 실행하면 코드가 상당히 복잡해지게 됩니다ㅜ

지극히 주관적이지만,  
제 경우 보고서나 정관 같은 문서에서 찾아바꾸기 비슷한 작업을 코드로 처리할 때는  
거의 대부분 아래 세 가지 방법 중 하나로 코딩을 했습니다.

1. 일괄 문자열교체 작업인 경우에는 무조건 AllDoc 옵션으로 문서 내 일괄 찾아바꾸기 실행

2. 찾기 이후 일련의 복잡한 과정을 실행하는 경우에는 Find 이후의 액션들을 함수로 만들어 처리

3. 찾는 번호가 바뀐다거나 정규식이 필요한 경우는 Find 대신 GetText를 이용해서 처리

보통 이 세 가지 케이스 안에서 대부분 해결되었습니다.

도움이 되었길 바랍니다.  
새해 복 많이 받으세요!^^
