본문 바로가기
반응형

아래아한글 자동화/python+hwp 중급162

hwp 표 캡션 서식 일괄 수정하기 이번 포스팅에서는 모든 표들의 캡션 텍스트 또는 서식을 파이썬으로 일괄 수정하는 방법을 알려드리겠습니다. 예제는 다소 간단하게, 아래처럼 표 하단 좌측으로 정렬되어 있는 캡션을 아래처럼 상단 중앙으로 옮기는 코드입니다. hwp문서 안에서 표 캡션을 수정하려면 다소 번거롭습니다. 대부분은 직접 마우스로 클릭하실 거고, (저도 그렇습니다) 실수로 표 옆이나 표 안에서 Ctrl-N-C 같은 단축키를 누르면 캡션이 없어져버리기 일쑤입니다ㅜ 특히 보고서나 논문(논문을 hwp로 작성하시는 분들이 많지는 않겠지만..) 작성시에는 분량이 큰 경우가 많은데, 표의 갯수가 어마어마할 때도 있지요. 샘플 문서를 하나 만듭시다. 빈 문서에다 표를 임의로 세 개만 만들겠습니다. (단축키는 Ctrl - New-Table) 여러분.. 2022. 12. 9.
[QnA] 표 너비 조절이 되지 않습니다. 이전 버전까지는 정상적으로 사이즈가 정상적으로 반영되었는데 특정패치이후에 안됩니다. 일시적인 버근줄알았는데 2022까지 계속 이어지네요. 문서의 width, widthRelTo를 적용해봐도 동일하게 용지사이즈만큼 늘어납니다. 질문출처 : 한글과컴퓨터 - 개발자 커뮤니티 이런 문제들은 대체로 이런 문제들은 대체로 필요한 파라미터 몇 개가 빠져 있어서 생깁니다. 표 생성시 필요한 파라미터가 굉장히 많기도 하고요. 프로그램에서 표를 만들면 행, 열의 수만 입력하고 엔터를 치면 표가 만들어지지만 이 간단한 과정을 매크로로 녹화해보면 깜짝 놀라게 됩니다. 코드가 너무 길거든요. 1행1열의 표를 삽입하는 매크로는 아래와 같습니다. function OnScriptMacro_중국어1성() { HAction.GetDef.. 2022. 12. 9.
[HDMI] 최종화 : 취합문서 스타일 교정 보호되어 있는 글 입니다. 2022. 12. 8.
[HDMI] 비슷한 문자열 매치 (by difflib.SequenceMatcher) 지난 포스팅까지, 스타일 이름을 가져오는 과정을 마쳤습니다. 이번에는 유사하지만 미묘하게 다른 단어들끼리 매칭할 때 많이 사용되는 파이썬 내장모듈인 difflib의 SequenceMatcher를 활용하는 방법을 알려드리겠습니다. 지금까지 이 고생을 해서 스타일 이름을 가져온 이유를 다시 상기해보면, 취합문서의 스타일 이름이 템플릿문서 대비 전부 미묘하게 바뀌어 있고 특히 템플릿의 스타일과 취합문서의 스타일 순서가 뒤죽박죽이 되어버렸기 때문입니다. (극단적인 예를 들었습니다.) 위 엑셀파일에는 취합문서 스타일의 이름이 템플릿 문서의 스타일과 전부 다릅니다. 여기 SequenceMatcher를 도입하면 어떨까? 그럼 SequenceMatcher의 사용법에 대해 간략히 보여드리겠습니다. 사실 SequenceM.. 2022. 12. 7.
[HDMI] 진짜 본격적으로 header.xml 파헤쳐보기 자, 이제 모든 준비가 끝났...다고는 말할 수 없지만 본격적으로 header.xml을 분석해보겠습니다. 왜 아직 모든 준비가 끝나지 않았냐면, 한/글의 xml 파일들은 "네임스페이스"라는 일종의 축약어를 사용하는데, 예를 들면, header.xml의 시작부분은 아래와 같습니다. 뾰족괄호와 콜론(:) 사이의 "hh"가 네임스페이스인데요. head 태그 안에 보면 xmlns:hh="http://www.hancom.co.kr/hwpml/2011/head" 라는 문구가 있습니다. xmlns 는 xmlNameSpace의 약자로, 이 문서 내 는 모두 실제 태그이름이 로 치환됩니다. iter() 메서드나 findall() 메서드 이용시 "hh:태그"로는 탐색이 되지 않기 때문에 1. 직접 저렇게 길게 입력하거나 .. 2022. 12. 7.
[HDMI] 본격적으로 xml 파헤쳐보기 지난 포스팅에서는 hwp 파일을 hwpx로 포맷변환하고, 압축을 푸는 과정을 진행해보았습니다. 이번 포스팅은 본격적으로 xml 파헤쳐보기 입니다. xml파일을 파싱하는 라이브러리는 여러 개가 있지만 우리는 xml파서의 큰형님(?)이라 불릴 수 있는 내장 패키지인 xml을 이용해보겠습니다. 그 중에서도 ElementTree라는 모듈을 사용할건데요. (ElementTree 외에도 xml 패키지 안에는 dom, parsers, sax 등의 서브패키지가 포함되어 있습니다.) 그 전에 우리가 파헤칠 header.xml 문서를 한 번 열어나 보고 시작하자구요. 포맷변환이나 압축해제 등 이전 과정을 건너뛰고 파싱에만 관심 있으신 분은 아래 첨부한 header.xml 파일만 다운받아서 실습을 진행해주시면 되겠습니다. .. 2022. 12. 7.
[HDMI] hwp를 hwpx로 포맷변환하고 압축 풀기 제목이 거창해 보이지만 사실 굉장히 간단한 프로세스입니다. 1. hwp를 hwpx로 포맷변환(다른 이름으로 저장) 2. hwpx파일 압축해제 이러면 제목이랑 똑같잖아!ㅜ 위 두가지 기능을 각각 구현해보겠습니다. 1. 다른이름으로 저장 한글에서 제공하는 API를 형식별로 크게 나누면 네 가지 정도가 있습니다. ①일반적인 메서드, ②프로퍼티, ③파라미터가 필요한 액션, 그리고 ④파라미터가 필요없는 액션 다른이름으로 저장하기 기능은 함수 형태의 메서드로도 구현되어 있습니다. hwp.SaveAs(파일명, 포맷)입니다. import win32com.client as win32 FILE_PATH = r"C:\Users\smj02\OneDrive\바탕 화면\빈 문서1.hwp" hwp = win32.gencache.E.. 2022. 12. 7.
[HDMI] 빈 문서1.hwpx를 분해해보면 안녕하세요? 일코입니다. HDMI(Hangul Document Manipulation and Information, 이름 참 잘 지었다!) 시리즈 예전에도 이와 관련한 포스팅을 한 번 올린 적은 있었습니다. 한/글 없이 hwpx 파일의 표를 pd.DataFrame으로 추출하는 방법 (tistory.com) 한/글 없이 hwpx 파일의 표를 pd.DataFrame으로 추출하는 방법 안녕하세요? 일상의 코딩, 일코입니다. hwpx 포맷이 만들어진지 벌써 10년도 훌쩍 넘었습니다. 한컴오피스에서는, 데이터 추출이 번거로운 기존의 hwp 포맷 대신 machine-readable한 hwpx 포맷을 사용해 martinii.fun 솔직히 말ㅆ므드리면 그 뒤로 틈틈이 파이썬의 xml 모듈 문서를 읽어보거나 튜토리얼을 .. 2022. 12. 7.
[hwpx 분석하기] HDMI 시리즈를 시작하며 잠시 과거회상 업무자동화 공부를 시작한지도 벌써 6년이 넘었습니다. 사실 업무 중에 가장 많은 시간을 썼던 코드는 아래아한글이 아니라 파이썬-셀레늄으로 브라우저(회사 그룹웨어) 작업을 자동화하는 거였어요. 이게 나름 해킹하는 느낌의 재미가 있어서 파고들게 되었습니다. 해킹이라는 표현은 좀 오바 같지만, 공기업의 그룹웨어가 이렇게 취약점이 많을 줄은 몰랐거든요. 재직 당시 보안팀에 제보했던 수십 개의 취약점 중에 굵직한 걸 꼽으라면 그룹웨어 로그인 비밀번호 입력 무력화, 로그인할 때 휴대폰 2차인증 패스, 다른 사우 사번으로 그룹웨어 및 메신저 로그인하기, 타 부서 기록물, 비공개문서 열람하기, 비밀번호 "1"로 바꾸기 등등 서비스 대부분이 주로 클라이언트 측에서 자바스크립트로 이뤄지는 구조라서 소스코드만.. 2022. 12. 7.
반응형