안녕하세요.
c#으로 프로그래밍하구요.
한글을 컨트롤 하는 재미가 쏠쏠합니다.
업무적으로 잘 이용하고 있기도 하구요.
이번에는 찾아 바꾸기를 하려고 합니다. 예를 들어 ‘(’ 와 ')'를 다 제거하고 싶을 때
ActionObject.hwp를 잠고해 보아도 잘 안 되어서
할 수 없이 단순 무식하게 SendKeys명령을 조합해서 하고 있는데,
원하는 대로 실행은 됩니다.
그렇지만 일일이 코딩하는 게 비효율적인데, 바로 변환할 수 있는 건 없는지요?
부끄럽지만 현재 제 코드는 이렇습니다. 텍스트에 범위 블록 지정한 상태이구요.
//찾아 바꾸기 창 열기
ExecuteHwpCommands(hwp, "ReplaceDlg");// 괄호 '(' 찾아 바꾸기
// 찾아 바꾸기 창에 괄호 넣기
string unicode3 = "\u0028"; // '' 입력
SendKeys.SendWait("{" + unicode3 + "}");
SendKeys.SendWait("{Tab}{Tab}"); // 탭하기, 바꿀 내용 입력창으로 포커스 옮김
SendKeys.SendWait("{DEL}"); // 내용 지우기
SendKeys.SendWait("{Tab}"); // 탭하기
//모두 바꾸기
SendKeys.SendWait(“+A”);
SendKeys.SendWait(“{ESC}{ESC}”); // 블록 밖에서도 찾으시겠습니까? 창 닫기 찾아 바꾸기 창 닫기
Thread.Sleep(100); // 100ms 대기
//찾아 바꾸기 창 열기
ExecuteHwpCommands(hwp, "ReplaceDlg");// 괄호 ')' 찾아 바꾸기
// 찾아 바꾸기 창에 괄호 넣기
string unicode4 = "\u0029"; // ')' 입력
SendKeys.SendWait("{" + unicode4 + "}");
SendKeys.SendWait("{Tab}{Tab}"); // 탭하기
SendKeys.SendWait("{DEL}"); // 지우기
SendKeys.SendWait("{Tab}"); // 탭하기
//모두 바꾸기
SendKeys.SendWait("+A");
SendKeys.SendWait(“{ESC}{ESC}{ESC}”); // 블록 밖에서도 찾으시겠습니까? 창 닫기 찾아 바꾸기 창 닫기 복사 해제
저는 c#에 익숙해서 c#으로 위의 코드를 구현했더니,
잘 실행이 되었습니다.
그런데 전체 문서가 아니라,
범위를 지정한 경우에는 어떻게 해야 할지 모르겠습니다.
그리고 AllDoc라는 말은 어디에서 참조할 수 있는지요?
ActionObject라는 문서에도 없어서 여쭙니다.
즐거운 한 주 되세요.
// HWP에서 Find & Replace를 사용하여 괄호 제거
var pset = hwp.HParameterSet.HFindReplace;
// 모든 괄호 제거
foreach (var paren in parenthesesToRemove)
{
// “AllReplace” 액션의 기본 설정 가져오기
hwp.HAction.GetDefault(“AllReplace”, pset.HSet);
// 모든 문서에서 찾기
pset.Direction = hwp.FindDir("AllDoc");
pset.FindString = paren; // 현재 괄호를 찾기 위한 문자열 설정
pset.ReplaceString = ""; // 찾은 문자열을 빈 문자열로 교체
pset.IgnoreMessage = 1; // 메시지 무시 설정
// 액션 실행
hwp.HAction.Execute("AllReplace", pset.HSet);
pset = hwp.HParameterSet.HFindReplace
hwp.SetMessageBoxMode(0x20000)
for i in ["(", ")"]:
hwp.HAction.GetDefault("AllReplace", pset.HSet)
pset.Direction = hwp.FindDir("AllDoc")
pset.FindString = i
pset.ReplaceString = ""
pset.IgnoreMessage = 0
hwp.HAction.Execute("AllReplace", pset.HSet)
hwp.SetMessageBoxMode(0xF0000)
2. AllDoc이라는 문자열은 어디서?
이 부분은 별도의 문서가 만들어져 있지는 않습니다.
하지만, 원하는 동작의 스크립트 매크로 녹화를 해보시면
해당 정수 옵션값을 알려주는데요.
친절하게 함수로 설정이 되어 있어 의미파악이 쉽습니다.
예를 들어 hwp.FindDir()은 찾기방향의 설정값을 리턴하는 함수인데 "Forward", "Backward", "AllDoc" 문자열을 넣으면 각각 정수로 0, 1, 2를 리턴합니다.
코드를 매번 재사용하는 우리 유저들 입장에서는 고마운 기능이죠. 2를 "문서 전체"라고 외우기는 쉽지 않으니까요.