본문 바로가기
아래아한글 자동화/pyhwpx 사용법

[pyhwpx] 스크립트매크로를 파이썬 함수로 바꿔주는 hwp.clipboard_to_pyfunc

by 일코 2024. 2. 10.

hwp.clipboard_to_pyfunc 를 설명하기 전에 먼저,

기존에 정의된 스크립트매크로를 한/글에서 직접 실행하는 명령어도 있기는 하다.

바로 hwp.run_script_macro라는 메서드인데,

사용법은 간단하다.

hwp.run_script_macro("OnScriptMacro_중국어1성()")

방식으로 사용하면 된다.

대신 유의할 점은,
스크립트매크로 목록의 이름인 "중국어1성"이 아니라
소스코드의 함수명인 "OnScriptMacro_중국어1성()"을 입력해야 한다는 것이다. (괄호 포함)

매크로 정의 최상단의 문자열(함수이름 전체)

 

그런데, 매크로는 수시로 녹화하는 관계로, 지워지거나 변경되는 경우가 잦다.
그래서 특정 매크로를 파이썬 코드로 만들어 두고 싶을 때가 있는데,

이 과정이 어려운 것은 아니지만, 번거롭고 귀찮다.
그래서 어느 정도 이 귀찮은 작업을 자동화해주는 메서드를 만들어보았는데,
이름하여, hwp.clipboard_to_pyfunc() 이다.

사용법은 간단하다.

 

1. 녹화된 스크립트매크로 전체를 복사한다.

2. hwp.clipboard_to_pyfunc()을 실행한다.

변환된 코드가 클립보드에 복사된다.

3. 빈 셀에 붙여넣기한다.

파이썬 함수명은 script_macro로 초기화되어 있으며,
함수이름만 변경하거나, 파라미터를 넣는 등 변경하면 된다.

예를 들어

문서의 모든 스페이스(" ")를 언더스코어("_")로 변경하는 스크립트매크로를 녹화했다.
녹화한 코드는 아래와 같다.

function OnScriptMacro_중국어1성()
{
	HAction.GetDefault("AllReplace", HParameterSet.HFindReplace.HSet);
	with (HParameterSet.HFindReplace)
	{
		MatchCase = 0;
		AllWordForms = 0;
		SeveralWords = 0;
		UseWildCards = 0;
		WholeWordOnly = 0;
		AutoSpell = 1;
		Direction = FindDir("Forward");
		IgnoreFindString = 0;
		IgnoreReplaceString = 0;
		FindString = " ";
		ReplaceString = "_";
		ReplaceMode = 1;
		IgnoreMessage = 1;
		HanjaFromHangul = 0;
		FindJaso = 0;
		FindRegExp = 0;
		FindStyle = "";
		ReplaceStyle = "";
		FindType = 1;
	}
	HAction.Execute("AllReplace", HParameterSet.HFindReplace.HSet);
}

hwp.clipboard_to_pyfunc()을 실행한 후 셀에 붙여넣은 코드는 아래와 같다.

def script_macro():
    pset = hwp.HParameterSet.HFindReplace
    hwp.HAction.GetDefault("AllReplace", pset.HSet)
    pset.MatchCase = 0
    pset.AllWordForms = 0
    pset.SeveralWords = 0
    pset.UseWildCards = 0
    pset.WholeWordOnly = 0
    pset.AutoSpell = 1
    pset.Direction = hwp.FindDir("Forward")
    pset.IgnoreFindString = 0
    pset.IgnoreReplaceString = 0
    pset.FindString = " "
    pset.ReplaceString = "_"
    pset.ReplaceMode = 1
    pset.IgnoreMessage = 1
    pset.HanjaFromHangul = 0
    pset.FindJaso = 0
    pset.FindRegExp = 0
    pset.FindStyle = ""
    pset.ReplaceStyle = ""
    pset.FindType = 1
    hwp.HAction.Execute("AllReplace", pset.HSet)

시연화면은 아래와 같다.

다만, 아직 개발중인 기능으로,
GetDefault와 Execute를 여러 번 수행하는 다중 프로세스 또는
서브셋을 사용하는 복잡한 함수는 아직 지원하지 않는다.

업데이트를 위해 정규식을 깊이 공부중이다ㅜ
조만간 업데이트 예정.

 

댓글