응용편에서 튜토리얼을 진행하는 중에 기본 메서드를 자세하게 다루다 보면
의식의 흐름이 툭툭 끊길 수 있어, 이런 식으로 메서드 설명을 기본편에 하나씩 써놓고
참고링크를 달아놓으려고 한다.
1. hwp.GetFieldList() 란?
hwp.GetFieldList()는 한/글 컨트롤 오브젝트(HwpCtrl Object)의 메서드 중 하나로
문서에 존재하는 필드(혹은 누름틀)의 목록을 구하는 메서드이다.
개인적으로 한/글 API가 참 친절하다고 느껴지는 부분은 매개변수 파트인데,
필드목록을 구하는 이 간단한 메서드에도 두 개 인자(number, option)에 각각 3개씩의 매개변수가 들어가 있어
누름틀을 상세하게 다룰 수 있다.
2. Number 인자
Number 인자(대소문자 구분)에 들어갈 수 있는 매개변수는 0~2까지 세 개다.
생략하면 기본값인 0이 대입되며, 결과는 아래와 같다.
그런데, 동일명의 누름틀이 두 개면 어떻게 출력되는지 궁금하지 않나?
바로, 아래처럼 나온다.
이 문자열을 리스트로 만들어보면?
보이다시피 필드이름이 중복되어 나타나고 있다.
지금 파이썬으로 한/글파일을 다루는 최종 목적이 "필드리스트 구하기"라면 아무 문제가 없다.
그런데 보통은 필드리스트를 구한 후, 이를 통해 필드 안에 값을 채워넣는 것이 목적이기 때문에,
위 방식으로는 오류가 발생하거나, (두 번째, 세 번째 누름틀이 채워지지 않을 수 있다.)
오류를 막기 위해 번거로운 작업을 보태야 한다.
그 때 유용한 파라미터가 Number=1(hwpFieldNumber)이다.
위처럼, 일종의 "일련번호"를 붙여 리턴해주면, 중복된 필드명이 있을 때에도 정확히 원하는 순서에 값을 넣을 수 있다.
이와 유사하지만 조금 다른 옵션으로 Number=2(hwpFieldCount)가 있다.
아이디인 hwpFieldCount에서 알 수 있듯, 각 필드의 갯수를 이중꼬불괄호 안에 넣어 반환해준다.
Number 인자에서 주로 사용하는 값은 보통, 0 또는 1인데, 필자는 개인적으로 1을 넣는 것을 선호하는 편이다.
예를 들어보자.
위 서식으로 100명분의 청구서를 PDF로 만들어야 한다고 할 때,
어떤 이는 한 쪽을 완성하고 PDF출력, 다시 다른 내용을 채우고 PDF출력, 바꿔쓰고 PDF출력~ 하는 방식.
즉, 한 쪽짜리 문서에 내용을 바꿔가며 PDF 100장을 출력하는 방식을 선호할 수 있다.
필자의 경우 다소 느려지는 것을 감안하고 100쪽짜리 문서를 만들고 저장, 누름틀에 각각 값을 채워 저장한 후
페이지별로 각각의 PDF를 출력하는 것을 선호한다. 경험상 여러가지 면에서 안정적이라고 생각해서다.
실제로 여러분도 API매뉴얼을 틈틈이 읽다 보면,
자동화를 처리할 수 있는 비범한(혹은 신박하기까지 한) 여러 가지 방법들이 떠오를 것이다.
3. option 인자
option 인자는 특정 부분의 필드 목록만 가져오고 싶을 때 사용하면 된다.
option 인자(전부 소문자)에 들어갈 수 있는 매개변수는 조금 특이한데,
0, 1, 2, 4 중 일부를 더해서 파라미터를 넣어야 한다.
생략하면 기본값인 0이 대입되며, 각각의 결과는 아래와 같다.
0 : 모두 구한다.
1 : 표의 셀에 부여된 필드만 구한다.
2 : 셀이 아닌, 일반 누름틀의 리스트만 구한다.
5 : (1+4) 블록선택한 영역 중 셀에 부여된 필드 목록만 리턴한다.
6 : (2+4) 블록선택한 영역 중 누름틀 필드 목록만 리턴한다.
처음엔 생소하지만, 많이 하다 보면 그래도 생소하다...
사실 필자도 여태껏 한 번도 현업에 사용해 본 적은 없다.
만약 사용하더라도 한 가지 꼭 주의할 점은,
1~10페이지 중 2페이지만 선택한 상태에서
hwp.GetFieldList(Number=1, option=6)을 주더라도
{{n}} 안의 숫자는 0이 된다는 점을 명심하자.
4. 마치며
MS 제품군 API를 다뤄본 분들이라면 메서드의 파라미터에 숫자가 들어가는 것이 익숙할 것이다.
아래아한글 API 메서드 대다수의 파라미터에 숫자가 들어간다.
파라미터 수가 꽤 많아서 API매뉴얼을 꼭 참고해야 하지만,
무엇보다 특이한 점은 2진수 혹은 16진수 파라미터끼리 더해야 하는 메서드가 종종 있다는 점?ㅎ
글자색 RGB값도, SetMessageBoxMode 도 그렇고..
하여튼 틈틈이 중요 메서드를 하나씩 심도있게 다뤄보고자 한다.
이번 포스팅은 여기서 마친다.
'아래아한글 자동화 > python+hwp 중급' 카테고리의 다른 글
커뮤니티질문 : GetText()에서 표, 글상자에서 텍스트 읽어오기? (0) | 2021.01.22 |
---|---|
[교육업무자동화2/7] 청구서자동화2(필드에 텍스트 자동입력) (2) | 2021.01.22 |
한/글 2020 최신 업데이트로도 고쳐지지 않은 API버그 (0) | 2021.01.14 |
댓글