스타일 재지정

문서에서 A라는 스타일이 적용된 문단을 찾아 다시 A라는 스타일을 적용하는 코드를

HAction.GetDefault("AllReplace", HParameterSet.HFindReplace.HSet);
with (HParameterSet.HFindReplace)
{
	MatchCase = 0;
	AllWordForms = 0;
	SeveralWords = 0;
	UseWildCards = 0;
	WholeWordOnly = 0;
	AutoSpell = 1;
	Direction = FindDir("AllDoc");
	IgnoreFindString = 1;
	IgnoreReplaceString = 1;
	FindString = "";
	ReplaceString = "";
	ReplaceMode = 1;
	IgnoreMessage = 1;
	HanjaFromHangul = 0;
	FindJaso = 0;
	FindRegExp = 0;
	FindTextInPicture = 0;
	FindStyle = "본문";
	ReplaceStyle = "본문";
	FindType = 1;
}
HAction.Execute("AllReplace", HParameterSet.HFindReplace.HSet);

를 활용하여 사용하고 있습니다.

그런데, 매 문서마다 스타일 이름 (“본문”) 을 매 번 수정해서 사용해야 하는 불편함이 있어
이를 자동화 하려 하는데 잘 안되네요

스타일 이름을 가져올 수 있는 방법은 아직 없는 건가요?

참고로, 스타일 내보내기를 하면 스타일의 개수, 각 스타일의 영문이름은 보내지는데, 그것을 활용할 수 있는 방법은 없을까요?

안녕하세요

현재 스타일을 가져오는 방법은 없습니다.
도움을 드리지 못해 죄송합니다. :sob:

감사합니다.

다음과 같은 방법으로 스타일 목록 및 사용 여부를 확인하였습니다.
function OnScriptMacro_script24()
{
var A = GetPosBySet();
HAction.Run(“SelectAll”);
// HML 포맷으로 문서를 읽어옵니다.
var txt = GetTextFile(“HWPML2X”, “saveblock”);
HAction.Run(“Cancel”);

// 1. <STYLELIST Count="숫자"> 추출
var countMatch = txt.match(/<STYLELIST\s+Count="(\d+)"/i);
if (!countMatch) {
    alert("에러: STYLELIST 정보를 찾을 수 없습니다.");
    return;
}

var totalStyles = parseInt(countMatch[1]);
var resultMsg = "전체 스타일 개수: " + totalStyles + "개\n";
resultMsg += "----------------------------\n";

// 2. 0번부터 totalStyles-1번까지 루프
for (var i = 0; i < totalStyles; i++) 
{
    // <STYLE Id="i" Name="이름" ... /> 패턴 매칭
    // 정규표현식 설명: Id="i"와 Name="값"을 순서와 상관없이 찾음
    var styleDefRegex = new RegExp("<STYLE[^>]*Id=\"" + i + "\"[^>]*Name=\"([^\"]+)\"", "i");
    var styleMatch = txt.match(styleDefRegex);
    
    if (styleMatch) 
    {
        var styleName = styleMatch[1];
        
        // 3. 본문 영역에서 Style="i" 사용 여부 확인
        var useRegex = new RegExp(" Style=\"" + i + "\"", "g");
        var isUsed = (txt.search(useRegex) > -1);
        
        // 디버깅 정보 조립: [ID] 이름 : 사용여부
        resultMsg += "ID " + i + " : [" + styleName + "] " + (isUsed ? "(사용 중)" : "(미사용)") + "\n";
    }
    else
    {
        resultMsg += "ID " + i + " : 정보를 찾을 수 없음\n";
    }
}

// 결과 출력
alert(resultMsg);

SetPosBySet(A);

}

function alert(s)
{
XHwpMessageBox.String = s;
XHwpMessageBox.Flag = 0;
XHwpMessageBox.DoModal();
}

1개의 좋아요