머리말에서 텍스트를 불러오는 방법을 알고 싶습니다.

안녕하세요 머리말의 텍스트를 추출하려고 하는데 GetText를 사용하니 문서전체의 텍스트가 출력되네요. 머리말 부문만 추출하는 방법은 없을까요.

1개의 좋아요

머리말에서 텍스트만 추출하는 예제 코드 전달드립니다.

한글 스크립트로 작성하였습니다. 참고부탁드립니다 ^^

function OnScriptMacro_script1()
{
	FindCtrl();
	HAction.Run("HeaderFooterModify");
	HAction.Run("SelectAll");

	var text = GetTextFile("TEXT","saveblock");
	
	var msgbox = XHwpMessageBox;
	msgbox.String = text;
	msgbox.DoModal();
}
2개의 좋아요

감사하게도 빨리 답변 주셨네요.
참고로 저는 한글 2014를 사용하고 파이쎤으로 작업을 해보았는데 실행해보니 엉뚱한 데이터가 얻어집니다.
엉뚱한 데이터란 머리말이 아니고 본문에 있는 표 중에서 4번째표의 A5셀값이 얻어집니다.
action을 관찰해보니 hwp파일을 로드할때 커서가 있던 Cell에서 블럭을 설정하고 텍스트를 얻는 것 같고 hwp.HAction.Run(“HeaderFooterModify”)는 에러가 나서 아래와 같이 수정해서 해봤는데 그 명령은 먹지 않는 거 같네요.
수고스럽지만 다시 한번 살펴봐 주시겠습니까

<코드>
import win32com.client as win32
hwp = win32.gencache.EnsureDispatch(“hwpframe.hwpobject”)
hwp.XHwpWindows.Item(0).Visible = True
hwp.RegisterModule(“FilePathCheckDLL”, “FilePathCheckerModule”)
path = ‘c:\xx.hwp’ # 개인정보라서 참고로 표기
hwp.Open(path)
hwp.FindCtrl()

에러 남 hwp.HAction.Run(“HeaderFooterModify”)
아래와 같이 수정 hwp.HAction.Run(“SelectAll”)

hwp.Run(“HeaderFooterModify”) # 에러는 나지 않지만 명령이 먹히지 않음.
hwp.Run(“SelectAll”)

text = hwp.GetTextFile(“TEXT”,“saveblock”)

print(text)

안녕하세요 ^^
커서가 머리말 컨트롤로 가있어야 하네요 ㅠ …
아래는 컨트롤의 코드이지만 오토메이션도 비슷하게 사용이 가능합니다 ^^
컨트롤코드를 가져와 해당 컨트롤 ID "head"를 체크하여 그위치로 이동후 가이드 대로 동작시키면 될것 같습니다.
감사합니다.

	DHwpCtrlCode code = m_cHwpCtrl.GetHeadCtrl();
	DHwpParameterSet paramSet;
	VARIANT list, para, pos;
	while (code && code != m_cHwpCtrl.GetLastCtrl()) {
		CString strID = code.GetCtrlid();
		if (strcmp(strID, _T("head")) == 0) {
			paramSet = code.GetAnchorPos(0);
			list = paramSet.Item("List");
			para  = paramSet.Item("Para");
			pos  = paramSet.Item("Pos");

			m_cHwpCtrl.SetPos(list.lVal, para.lVal, pos.lVal);
			break;
		}
		code = code.GetNext();
	}
1개의 좋아요

늦었지만 답변에 감사드리고 보내주신 제안으로 해결을 시도하였으나 아직 한글 api가 익숙치 않아 이해하지 못한 때문인지 잘 안되었고요, 다른 방법으로 해결하였습니다.
해결한 방법은 head 컨트롤을 찾아서 GetText로 검색하면서 조건문을 사용하여 반환값 중 4번(제어문자로 들어감)과 5번(제어문자를 빠져나옴) 사이의 텍스트만 추출하였더니 성공하였습니다. 참고하십시오.
어찌 됐던 보내주신 제안에는 감사드립니다.

2개의 좋아요

해결하셨다고 하니 다행이네요 ~!

좋은 하루 보내세요 :slight_smile:

1개의 좋아요