본문 바로가기
아래아한글 자동화/python+hwp 입문

2-8. 필드위치로 캐럿 옮기기

by 회사원코딩 2022. 11. 9.

이번 챕터에서 알려드릴 메서드는

누름틀 또는 표 안의 셀 필드로 커서를 한 번에 옮기는 hwp.MoveToField 입니다.

'PutFieldText로 텍스트만 입력할 수 있으면 되는 거 아닌가?' 하고 생각할 분들도 계실 수 있겠네요.

MoveToField가 아주 유용하게 쓰이는 경우 중 하나가 바로

"특정 셀 안에 이미지 넣기" 같은 작업입니다.

이게 얼마나 코드를 간편하게 만드는지 비교해서 보여드리겠습니다.

아래와 같은 표가 있을 때

두 번째 표의 B3 셀(빨간 테두리)에 나무사진4.jpg를 삽입하고자 합니다.

MoveToField를 쓰지 않는다면 아래의 과정을 거쳐 이미지를 삽입합니다.

① hwp.InitScan 실행 후에
② hwp.GetText로 "나무사진4"가 나올 때까지 탐색하다가 "나무사진4\r\n" 문자열을 찾으면
③ hwp.MovePos를 통해 해당 문자열이 있는 곳으로 커서를 옮기고
④ hwp.ReleaseScan으로 탐색작업을 해제한 후에
⑤ hwp.Run("MoveUp")으로 바로 위의 빈 칸으로 올라가서
⑥ hwp.InsertPicture로 이미지 삽입

이렇게 여섯 개의 프로세스를 코드로 옮겨야 하는데,

막상 이렇게 설명해 놓고 나니, 그리 어마어마한 작업은 아니네요..

수작업으로 셀필드를 삽입해놓은 경우라면 굉장히 간편해집니다.

① hwp.MoveToField로 찾아간 후
② hwp.InsertPicture로 이미지 삽입

어때요? 굉장히 직관적이고 간편해졌죠?

일회성 작업에는 잘 쓰이지 않겠지만

특정 포맷의 한/글 보고서를 매일 오전에 완성해서 보고해야 한다든지 하는

루틴한 작업에는 미리 이런 코딩을 해 두면 작업시간이 확 줄어들 수 있겠네요.

파이콘 영상 중에 굉장히 좋은 케이스가 있어서 소개합니다.

이 분 말씀도 참 잘 하세요ㅎㅎ

공무원 환경에서의 업무 자동화 - 김재윤 - PyCon Korea 2021

하여튼, 이제 직접 코딩해봅시다.

자연사진모음#나무사진4.hwp
0.02MB
나무사진4.jpg
0.38MB

<Photo by Todd Quackenbush on Unsplash>

먼저 필드입력 수작업부터 해 봅시다.

셀 필드를 삽입했습니다.

제대로 삽입되어 있는지 확인해볼까요?

hwp.GetFieldList()
# >>> "나무사진4"

잘 삽입되어 있네요.

이제 아래 코드를 이어서 실행해봅시다.

hwp.MoveToField("나무사진4")  # "나무사진4" 필드로 커서 이동
사진경로 = r"C:\Users\smj02\Desktop\나무사진4.jpg"
hwp.InsertPicture(사진경로, sizeoption=2)  # 셀 크기에 꽉 차게 이미지 비율 조절 후 삽입

여기까지, hwp.MoveToField의 사용법과, 유용한 케이스인 "필드로 찾아가서 이미지 삽입" 코드를 소개해드렸습니다.


부록 : InserPicture에 대한 (지극히 개인적인) 고찰 TMI

InsertPicture는 우리가 생각하는 이미지 삽입과 다소 다르게 작동합니다.

일반적으로 이미지를 삽입하면 아래와 같이 작동하지요.

알고 계신 바와 같이, 셀 높이가 이미지 높이에 맞게 조정되지요. 이미지 너비는 셀 너비에 맞추고요.

그런데 InsertPicture 메서드의 sizeoption 은 네 가지(0~3)나 있는데 그 중에 위의 옵션이 없습니다.

하나씩 보여드리겠습니다.

'왜 사이즈옵션을 이렇게밖에 안 만들어놓았을까?'

개발자들의 의도는 잘 모르겠지만,

업무자동화 코드를 짜보면, 이미지 삽입 때문에

아래 위치한 텍스트나 표가 다음페이지로 넘어가버린다든지 하는,

문서 틀이 흐트러지는 문제가 오히려 해결하기 어렵기도 합니다.

그 때문에 이렇게 프로그램을 짠 게 아닐까 하는 생각도 해 봅니다.

굳이 이미지를 기존 방식과 비슷하게 삽입하려면

이미지가 들어갈 셀을 미리 적절한 사이즈로 조절해놓으면 되겠지요.

이 때는 sizeoption=2를 지정하면 (우리가 방금 진행했던 예제처럼) 매끄럽게 삽입이 됩니다.

조금 번거로운 다른 방법으로는, sizeoption을 1로 정해놓고, 이미지 너비를 셀너비와 동일하게 조정한 후에

이미지 너비가 축소/확대되는 비율과 동일하게 이미지 높이도 축소/확대 계산해서

InsertPicture 메서드의 인자인 Width와 Height에 올바른 값을 입력하면 되고요.

이미지 사이즈가 제각각이면서, 셀 높이보다 이미지 배율이 중요한 경우에는 이런 식으로 코딩을 해야겠네요.

...TMI가 너무 길었습니다ㅎ

이번 챕터는 여기서 마치겠습니다.

다음 챕터에서는 필드를 사용하지 않고 텍스트를 입력하거나 탐색하는

고급 주제를 하나씩 다뤄보겠습니다. 

앞에도 한 번 말씀드렸지만, 지금 필요한 게 아니라면 아직 읽지 않으실 것을 조심스럽게 권합니다.

여기까지 배운 내용으로도 충분합니다.

수고하셨습니다!

반응형

'아래아한글 자동화 > python+hwp 입문' 카테고리의 다른 글

3. 입력하기  (0) 2022.11.10
2-7. 필드 삭제하기  (0) 2022.11.09
2-6. 필드속성 수정하기  (0) 2022.11.09

댓글0