튜토리얼

사용 기초
The autoreload extension is already loaded. To reload it, use:
  %reload_ext autoreload

한컴 오피스는 액션이라는 것을 통해서 다양한 문서 편집을 가능하게 하고 있습니다. 그런 편집을 파이썬에서 보다 쉽게 사용하기 위해 만든 라이브러리입니다.

기본적인 컨셉은 win32com을 쉽게 사용할 수 있게 개편한 것입니다.

문서 편집의 기본 기능인 1. 문장 입력하기 2. 커서 이동하기 2. 영역 선택하기 2. 서식 변경하기 3. 텍스트 가져오기

from hwpapi.core import App

App은 기존 hwpapi를 wrapping 하여 보다 사용하기 쉽게 만드는 것을 목적으로 하고 있는 클래스 입니다.

hwpapi는 한글 컨트롤을 조합해서 자주사용했던 기능을 구현하였습니다. 또한, api 메소드를 통해 win32com의 방식으로 모두 사용할 수 있어 다양하게 사용할 수 있습니다.

아래와 같이 App 객체를 생성하면 한글이 열립니다.

app = App()

한글을 조작할 때는 크게 actionhwpctrl method로 나눌 수 있습니다. action은 파라미터를 설정하고 그것을 실행시켜서 작동하는 방식으로 사용자 단축키를 누르면 실행되는 명령에 가깝다면 hwpctrl method는 한글 자동화 모듈이 제공하는 것으로 사용자 입력에서는 신경쓰지 않아도 될 부분들을 처리하는 것이라고 보시면 됩니다.

공식 개발 매뉴얼에 여러 actionparameter, method의 설명을 제공하고 있습니다. 아쉽게도 문서가 잘 관리되고 있지는 않으며, hwpctrlmethod들을 보면 명시되어 있지 않은 기능들이 개발되어 있음을 알 수 있습니다.

앞으로 개발해 나가면서 확인된 액션과 메소드 들을 정리해 나가고자 합니다.

actionapp에서 생성할 수 있습니다. 방식은 크게 2가지로 직접 action key를 입력하는 방법과 actions에 있는 action 객체를 생성하는 방법이 있습니다. 아래 두 방식은 동일한 Action 객체를 생성합니다.

action1 = app.create_action("InsertText")
action1
<Action InsertText: 텍스트 삽입>
action2 = app.actions.InsertText()
action2
<Action InsertText: 텍스트 삽입>

Delete(지우기), BreakPara(줄바꿈) 등 많은 action은 파라미터 세팅이 필요 없습니다. 하지만 위에서 생성한 InsertText객체는 입력할 텍스트 값을 넣어주어야 합니다. 이는 parameter를 통해 설정할 수 있습니다.

action1.pset.Text = "입력하기"

파라미터를 설정한 후 다음과 같이 액션을 실행하면 텍스트가 입력되는 걸 볼 수 있습니다.

action1.run()
True
charshape = app.actions.CharShape()
charshape.pset.Height = app.api.PointToHwpUnit(20)
charshape.run()
True
action2.pset.Text = "크게 입력하기"
action2.run()
True

입력하기

입력은 가장 자주 사용하는 것이기 때문에 다음과 같이 App의 메소드로 만들었습니다.

app.insert_text("더 크게 입력하기", height=30)
action = app.actions.Select()

이동하기

크게 두가지 방법이 있습니다.

액션을 사용하는 방법과 단어를 찾아가는 방법이 있습니다.

app.actions.MoveColumnBegin().run()
True

actions를 아래와 같이 하여 찾는 경로를 깗게 할 수도 있습니다.

actions = app.actions
actions.MoveColumnBegin().run()
True
app.find_text("해해")
False

텍스트 선택하기

문서에서 드래그한 것과 같이 영역을 선택할 수 있습니다.

app.select_text("Para")
(True, True)

서식 넣기

선택한 영역에 글자 서식을 넣을 수 있습니다.

app.set_charshape(fontname="바탕체", height=25, bold=True)
True

문단 서식 또한 가능합니다.

app.set_parashape(left_margin=50)
True

텍스트 가져오기

현재 위치의 문장이나 텍스트를 가져 올 수 있습니다. 기본은 현재 문장의 시작에서 문장의 끝을 선택합니다.

app.get_text()
'입력하기크게 입력하기더 크게 입력하기\r\n'

선택 영역만 가져올 수도 있습니다.

app.get_selected_text()
'입력하기크게 입력하기더 크게 입력하기\n'