안녕하세요 머리말의 텍스트를 추출하려고 하는데 GetText를 사용하니 문서전체의 텍스트가 출력되네요. 머리말 부문만 추출하는 방법은 없을까요.
머리말에서 텍스트만 추출하는 예제 코드 전달드립니다.
한글 스크립트로 작성하였습니다. 참고부탁드립니다 ^^
function OnScriptMacro_script1()
{
FindCtrl();
HAction.Run("HeaderFooterModify");
HAction.Run("SelectAll");
var text = GetTextFile("TEXT","saveblock");
var msgbox = XHwpMessageBox;
msgbox.String = text;
msgbox.DoModal();
}
감사하게도 빨리 답변 주셨네요.
참고로 저는 한글 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();
}
늦었지만 답변에 감사드리고 보내주신 제안으로 해결을 시도하였으나 아직 한글 api가 익숙치 않아 이해하지 못한 때문인지 잘 안되었고요, 다른 방법으로 해결하였습니다.
해결한 방법은 head 컨트롤을 찾아서 GetText로 검색하면서 조건문을 사용하여 반환값 중 4번(제어문자로 들어감)과 5번(제어문자를 빠져나옴) 사이의 텍스트만 추출하였더니 성공하였습니다. 참고하십시오.
어찌 됐던 보내주신 제안에는 감사드립니다.
해결하셨다고 하니 다행이네요 ~!
좋은 하루 보내세요