해결된 질문
작성
·
25
1
수학/과학이나 알고리즘과는 달리
업무자동화 코딩은 고민해서 풀리는 경우가 정말 드뭅니다.
다시 말씀드리지만, 질문을 자주자주 남겨주세요.
저도 최대한 빠르게 회신 드리겠습니다.
====================================
안녕하세요 일코님
메일드렸는데 많이 바쁘신듯 하네요~ ㅠ.ㅠ
열심히 구현하고 있는데,
(1) 블록 설정된 내에서 표가 몇개 있는지 확인 하는것
(2) 표의 갯수를 확인하고 차례로 그 표를 찾아서 진입하는 방법
을 잘 모르겠습니다.
(3) 이전에 블록 내에서 텍스트를 검색하는 방법을 알려주셨었는데, 그것을 잘 활용하고 있는데요.
def 블록내_텍스트_포함_여부(text):
try:
hwp.InitScan(Range=0xff) # 0xff <<선택된 범위 내에서 검색
except:
hwp.InitScan(range=0xff)
_, range_text = hwp.GetText() # 텍스트만 추출
hwp.ReleaseScan() # releaseScan이란 함수는 스캔을 해제.
hwp.HAction.Run("MoveParaEnd")
return f"{text}" in range_text # 이경우, 해당 target이 text에 포함되어있으면 True, 아니면 False를 반환.
python 터미널에서 행별로 코드를 실행할 때,
Range=0xff 를 했을때 올바른 파라미터가 아니라고 오류가 뜰때가 많더라구요
근데 또 이걸 py파일을 실행해서 했을떄는 되는거 같구요.
그래서 그냥 try except 구문을 쓰고있는데,
제가 뭔가를 잘못사용하고 있는 걸까요?
감사합니다.
답변 1
0
병현님 안녕하세요?
(메일은 오늘에야 회신을 드렸습니다^^;)
두 가지 방법이 있습니다.
적절한 방법을 선택하시면 되겠습니다.
hwp.GetTextFile 메서드를 사용하면 간편합니다.
hwp.GetTextFile(format="HWPML2X", option="saveblock:true").count("<TABLE")
대신 표 안의 표도 별개로 카운트한다는 점 유의하시기 바랍니다.
hwp.GetSelectedPos()
메서드는 블록의 범위를 튜플로 반환합니다.
(블록상태이면 True, 시작리스트, 시작문단, 시작글자, 끝리스트, 끝문단, 끝글자)
hwp.GetSelectedPos()
로 탐색할 범위를 찾았으니
표의 갯수는 표 ctrl을 순회하면서 해당하는 갯수만 찾으면 되겠습니다.
코드는 아래와 같습니다. (표 안의 표는 카운트하지 않습니다.)
# 블록선택 상태에서
slist, spara, spos, elist, epara, epos = hwp.GetSelectedPos()[1:]
count = 0
ctrl = hwp.HeadCtrl.Next.Next
while ctrl:
if ctrl.UserDesc == "표":
ctrl_pos = ctrl.GetAnchorPos(0)
if spara <= ctrl_pos.Item("Para") <= epara and ctrl_pos.Item("List") == 0:
count += 1
ctrl = ctrl.Next
print("블록 내 표의 갯수 : ", count)
위의 두 번째 방법은 사실 ctrl에 접근해서 갯수를 세는 방법이므로
위 코드를 조금만 수정하면 표 안에 접근하는 코드를 구현할 수 있습니다.
블록영역(본문) 내 각 표의 A1셀에 진입한 후, "Hello!\r\n" 문자열을 삽입하는 예시코드입니다.
# 블록선택 상태에서
slist, spara, spos, elist, epara, epos = hwp.GetSelectedPos()[1:]
count = 0
ctrl = hwp.HeadCtrl.Next.Next
while ctrl:
if ctrl.UserDesc == "표":
ctrl_pos = ctrl.GetAnchorPos(0)
if spara <= ctrl_pos.Item("Para") <= epara and ctrl_pos.Item("List") == 0:
# 표에 접근 및 수정하는 코드 삽입
hwp.SetPosBySet(ctrl_pos)
hwp.SelectCtrlFront()
hwp.ShapeObjTextBoxEdit()
hwp.insert_text("Hello!\r\n")
# 표 수정하는 코드 종료
ctrl = ctrl.Next
도움이 되었길 바랍니다.
행복한 하루 되세요!!!