inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

블록 내에서 표 갯수 확인하기, 표 찾기

해결된 질문

174

윤병현

작성한 질문수 20

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 구문을 쓰고있는데,

제가 뭔가를 잘못사용하고 있는 걸까요?

감사합니다.

python 한컴오피스

답변 1

0

일코

병현님 안녕하세요?

(메일은 오늘에야 회신을 드렸습니다^^;)

 

1. 블록 내 표의 갯수

두 가지 방법이 있습니다.

적절한 방법을 선택하시면 되겠습니다.

1-1. 선택부분을 블록저장하고 Table 갯수 세기

hwp.GetTextFile 메서드를 사용하면 간편합니다.

녹화_2024_12_14_14_03_56_265.gif
hwp.GetTextFile(format="HWPML2X", option="saveblock:true").count("<TABLE")

대신 표 안의 표도 별개로 카운트한다는 점 유의하시기 바랍니다.

 

1-2. ctrl의 pos를 일일이 확인하는 방법

hwp.GetSelectedPos() 메서드는 블록의 범위를 튜플로 반환합니다.

(블록상태이면 True, 시작리스트, 시작문단, 시작글자, 끝리스트, 끝문단, 끝글자)

녹화_2024_12_14_14_07_45_489.gif

hwp.GetSelectedPos()로 탐색할 범위를 찾았으니

표의 갯수는 표 ctrl을 순회하면서 해당하는 갯수만 찾으면 되겠습니다.

녹화_2024_12_14_14_22_13_672.gif

코드는 아래와 같습니다. (표 안의 표는 카운트하지 않습니다.)

# 블록선택 상태에서
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)

 

2. 표의 갯수를 확인하고 진입하기

위의 두 번째 방법은 사실 ctrl에 접근해서 갯수를 세는 방법이므로

위 코드를 조금만 수정하면 표 안에 접근하는 코드를 구현할 수 있습니다.

녹화_2024_12_14_14_28_56_916.gif

 

블록영역(본문) 내 각 표의 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

도움이 되었길 바랍니다.

행복한 하루 되세요!!!

섹션7과 같은 수학 수식을 백지에서 시작할 때 어떻게 만들 수 있을까요?

0

76

1

hwp 병렬 작업시 클립보드 충돌문제

0

58

1

본문을 각주로 내리는 법

1

93

1

한글 자동화 삽도 삽입!!

1

384

2

한글 표 내부 위치 찾는 코드좀 알려주세요 ㅠㅠ

1

233

2

빈 문서를 새로 열때는 팝업이 안나오는데 기존 문서를 열면 팝업이 나옵니다

1

118

2

사무실 컴퓨터ㅠ

0

96

2

글자입력 여러번 실행기

0

67

1

현재 커서 문단에 아무런 내용이 없는지 확인하기

1

102

1

특정 스타일을 찾아 이동하는 방법

1

161

2

한/글 파일 open 시 '상위 버전에서...' 메세지 안 뜨게 하는 방법?

1

1108

1

win32com 으로 hwp 문자열 검색하기 문의

1

222

2

[응용] 엑셀문서 값을 필드에 입력하기 질

1

122

1

표 병합하기 관련

0

140

0

메타태그 삽입 자동화

0

191

1

스크립트 매크로 초기화 하고 싶습니다.

1

270

2

한글 창이 여러 개 존재할 때 pyhwpx 모듈로 접근하는 방법을 알고 싶습니다.

1

271

1

표안의 특정 필드에 있는 이미지를 복사하여 한글 외부에 저장하기

1

273

2

스타일 싹 다 지우고 바탕글로 통일하는 방법 문의드립니다.

1

283

0

하위의 여러 폴더 중 특정폴더의 사진만 추출하기

1

345

2

한글 수식을 자동으로 넣는 코드를 만들었는데, 수식 사이의 간격이 계속 벌어집니다.

1

653

1

보유 특허 검색 페이지에서 검색이 되지 않습니다.

1

137

1

hwp 페이지별 분할 저장하는 코드 관련 문의

0

446

0

한글 문서에 사용된 폰트명 추출

1

644

1