본문 바로가기

HWP47

두 개 이상의 문서를 동시에 열어서 편집하고 싶은 경우 한/글은 "창"과 "탭"을 통해 동시에 두 개 이상의 문서를 열어서 편집할 수 있습니다. pyhwpx에서 탭을 추가하는 메서드는 add_tab()이며, 창을 추가하는 메서드는 add_doc()입니다. 편집문서를 전환하려면 switch_to(idx) 메서드를 사용합니다. 다만 유의하실 점이 하나 있는데요. 마우스 클릭이나 Alt-Tab 등으로 직접 한/글 창의 포커스를 변경하면 hwpx인스턴스도 (switch_to 메서드와 상관없이) 동일하게 포커스된 문서를 가리키게 됩니다. 특히 빈 문서가 아니라 기존의 문서를 열어서 편집하시는 작업이라면, 작업 도중 인덱스 몇 번이 어느 문서를 가리키고 있는지 헷갈릴 수 있는데요. 인스턴스 자체를 여러 개 생성하여 작업하실 수도 있습니다! 개인적으로 이 방법이 조작이 .. 2023. 11. 30.
스크립트매크로를 파이썬 함수로 고쳐주는 함수 #clipboard_to_pyfunc() 자동화 작업을 하다 보면, 한/글 API에 나와 있지 않은 기능을 스크립트매크로로 녹화해서 파이썬 함수로 변환하려고 하는데, 매크로 자체가 너무 길고 복잡할 때가 있어요. 예를 들어, 아래는 "찾아바꾸기"를 녹화한 스크립트매크로예요. function OnScriptMacro_중국어1성() { HAction.GetDefault("AllReplace", HParameterSet.HFindReplace.HSet); with (HParameterSet.HFindReplace) { MatchCase = 0; AllWordForms = 0; SeveralWords = 0; UseWildCards = 0; WholeWordOnly = 0; AutoSpell = 1; Direction = FindDir("Forward.. 2023. 11. 30.
pyhwpx 간편설치 및 실행 방법 pyhwpx는 고급 업무자동화 기능의 구현보다는, 기본적이고 많이 쓰이지만 다소 사용법이 까다로운 API들을 보다 직관적이고 간단히 실행할 수 있도록 만들어진 모듈입니다. (아직은 개발 초기라서) 직관적이지 않거나, 일명 파이써닉하지 않은 부분이 있습니다.. 조금씩 개선하고 보완하겠습니다. 현재 제 PC에 설치되어 있는 파이썬은 3.11, 아래아한글은 2022 버전입니다. 대부분의 포스팅은 주피터노트북으로 진행하겠습니다. 그럼 설치부터 시작해봅시다. 주피터노트북을 여셨으면 첫 번째 코드 셀에 %pip install pyhwpx 를 입력하고 실행해주세요. 모듈 임포트는 아래와 같은 방식으로 진행합니다. from pyhwpx import Hwp # from pyhwpx import * # (선택) 로우레벨 .. 2023. 11. 28.
[이벤트핸들러] 문서저장시 첫 번째 표를 엑셀로 자동저장하는 이벤트 hwp automation에서는 꽤 다양한 이벤트핸들러를 제공하고 있는데요. 대략의 목록은 아래와 같습니다. OnQuit OnCreateXHwpWindow OnCloseXHwpWindow OnNewDocument OnDocumentBeforeClose OnDocumentBeforeOpen OnDocumentAfterOpen OnDocumentBeforeSave OnDocumentAfterSave OnDocumentAfterClose OnDocumentChange OnDocumentBeforePrint OnDocumentAfterPrint OnDocumentClickedHyperlink OnDocumentModifiedHyperlink OnBeforeQuit 대략의 사용법을 예시코드로 보여드려보면, """.. 2023. 11. 28.
기본메서드 매핑 완료 2023. 11. 16. 01:48 올해 수능시험을 보는 수많은 젊은이들, 이따 있을 시험을 위해 어마어마한 시간을 준비했을텐데.. 밤잠을 못 이루고 있을 것 같다. 난 졸려 죽겠다ㅜ 방금 드디어 공식문서의 액션리스트 중 현재 실행되는 모든 액션을 snake_case로 매핑 완료했다. 이젠 메서드에만 있고, API문서에는 없는 메서드들이 남았다. (매핑은 완료했고, 문서화가 남았다.) docstring 작성도 평생 이렇게 꼼꼼하게 해 본 적이 없었다. 몸은 힘들지만, 그래. 솔직히 즐겁기도 하다. 장고로 직접 블로그를 만들어 운영했던 2017년이 문득 기억난다. 웹에 대해 아무 것도 모르고 (지금도 잘 모르지만) 무작정 장고가 좋아서 이것저것 따라해보다가 썸머노트와 프리즘js, 여러 가지 라이브러리를 추.. 2023. 11. 16.
hwpx 모듈 개발 중에 버그 하나를 해결하면서.. 2023. 11. 15. 개발일기 hwpx 모듈 개발에 착수한지 일주일쯤 되었는데, 예상하지 못한 몇 가지 문제를 우연히 발견하게 되었다. Hwp라는 클래스를 만들면서, 생성자(__init__) 안에서 win32로 한/글 오토메이션 오브젝트를 생성하고 인스턴스가 실행하는 모든 메서드는 내부의 hwp 오브젝트와 연결되게끔 매핑을 해두었는데, 오토메이션 프로퍼티 중 HeadCtrl과 LastCtrl 두 개가 말썽이었다. Hwp인스턴스.HeadCtrl이 클래스 내부에 생성되어 있는 hwp오브젝트.HeadCtrl과 같지 않다는 것을 발견했다. 새 문서를 Hwp로 열었는데, 표를 몇 개 추가한 후 여전히 인스턴스.LastCtrl이 "단 정의"라는 충격적인 결과를 보는 와중에도, hwp.LastCtrl.Next.U.. 2023. 11. 15.
아래아한글 업무자동화를 위한 파이썬 모듈, pyhwpx 업무자동화 관련한 교육을 몇 회 진행해보면서 강하게 느낀 부분 중 하나는, 일반 사용자 대부분이 "긴 코드"에 대해 불편함을 느낀다는 건데요. 정부부처, 공공기관이나 기관 연수원에서는 장기간의 교육은 잘 만들어지지 않고, 7~8시간 안에 파이썬 기초부터 업무자동화 중급까지 진행해야 하는 상황, 업무자동화에 유용하게 써먹었던 이런저런 함수들을 모아서 간단한 클래스로 구현해놓고, pypi에 업로드해 두려고 합니다. 문서화나 동영상 촬영도 틈틈이 해 보고 싶고요. 우선 사용법은 아래와 같습니다. 1. 터미널에서 pip install pyhwpx로 모듈을 설치한다. 2. 파이썬에서 from pyhwpx import Hwp로 클래스를 임포트한다. 3. hwp = Hwp()로 한/글을 연다. 4. 한/글에서 제공하.. 2023. 11. 7.
[python+hwp] 생각보다 hwp 업무자동화가 어렵다면... 한컴오피스 업무자동화 튜토리얼을 블로그와 유튜브에 몇 년간 작성해 오면서 받았던 모든 피드백 중에 "감사하다"는 의견을 제외하면 "너무 어렵다"는 말씀이 가장 많습니다. 저도 이게 큰 고민거리인데요.. 제 설명이 미흡한 탓이라는 생각이 드니까 반성도 많이 하게 되고요. 제 기준에서 '의외로 쉽고, 이해하면 간단하기도 하다.'는 막연한 느낌은 아마 제가 입문자들의 레벨을 벌써 잊어버렸기 때문일 것입니다. 아마도 제가 "한/글 업무자동화"를 쉽다고 생각하는 첫 번째 이유는, 당장 방법이 생각나지 않거나, 막히더라도 어떤 과정으로 해답을 찾아가야 하는지 알기 때문인 것 같습니다. 그래서 이번 포스팅에서는 일반적으로 활용할 수 있는 한/글 업무자동화 코드작성 과정을 의식의 흐름대로 한 번 쭉 써내려가 보려고 합.. 2023. 2. 1.
한/글 표로 차트 그리기(확산형 누적막대) 다음과 같은 설문데이터가 있습니다. 시각화를 해 보고 싶은데 일반적인 누적막대로는 행간의 차이가 뭐랄까 극적이지 않습니다. 그래서 경계선으로 정렬해서 좌우로 튀어나오게 아래와 같은 차트를 만들어 보고 싶었습니다. 가장 자주 사용하는 "수업 안내"의 점유율이 높다는 정보가 시각적으로 훨씬 더 두드러지는 느낌입니다. 재미있게도 위 이미지는 아래아한글 표로 직접 만든 차트입니다. 구현을 고민하는 데 시간이 많이 들기는 했지만 코드 자체는 길지 않을뿐더러, 생각보다 간단합니다. 코드와 시연화면을 보여드리겠습니다. 파이썬 코드 import os from time import sleep import win32com.client as win32 import pandas as pd def shift(percent, d.. 2022. 12. 18.