안녕하세요? 일코입니다.
유튜브와 블로그를 운영하면서 받았던 문의 중 90%는
바로 "표"에 관한 내용들이었습니다.
표는 비단 행정뿐만 아니라,
한/글을 통해 작성되는 문서에서 가장 많이 쓰이는 컨트롤이죠.
그런데 기존의 한/글 오토메이션 API를 통해 표를 읽어오거나, 표를 작성하는 메서드는
다소 큰 진입장벽이 있었습니다.
예를 들어 비교적 최근 만든 pyhwpx에서
5행5열의 표를 만들고 "글자처럼 취급"을 적용하는 코드는
아래 세 줄이면 되지만,
from pyhwpx import Hwp
hwp = Hwp()
hwp.create_table(5, 5, treat_as_char=True)
그런데,
기존 오토메이션API를 통해 동일한 표를 직접 생성하려면
무려 아래의 코드를 작성해야 합니다.
(혹시 관심 있는 분은 아래의 "더보기"를 클릭하시고, 차근차근 읽어보셔도 좋습니다.)
import win32com.client as win32
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Item(0).Visible = True
hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")
rows = 5 # 행 갯수
cols = 5 # 열 갯수
width_type = 0 # 너비: 단에 맞춤
height_type = 0 # 높이: 자동
height = 0 # height 기본값 초기화
treat_as_char = True # 글자처럼 취급
pset = hwp.HParameterSet.HTableCreation
hwp.HAction.GetDefault("TableCreate", pset.HSet) # 표 생성 시작
pset.Rows = rows
pset.Cols = cols
pset.WidthType = width_type # 너비 지정(0:단에맞춤, 1:문단에맞춤, 2:임의값)
pset.HeightType = height_type # 높이 지정(0:자동, 1:임의값)
sec_def = hwp.HParameterSet.HSecDef
hwp.HAction.GetDefault("PageSetup", sec_def.HSet)
total_width = (sec_def.PageDef.PaperWidth - sec_def.PageDef.LeftMargin
- sec_def.PageDef.RightMargin - sec_def.PageDef.GutterLen
- hwp.MiliToHwpUnit(2))
pset.WidthValue = hwp.MiliToHwpUnit(total_width) # 표 너비
if height and height_type == 1: # 표높이가 정의되어 있으면
total_height = (sec_def.PageDef.PaperHeight - sec_def.PageDef.TopMargin
- sec_def.PageDef.BottomMargin - sec_def.PageDef.HeaderLen
- sec_def.PageDef.FooterLen - hwp.MiliToHwpUnit(2))
pset.HeightValue = hwp.MiliToHwpUnit(height) # 표 높이
pset.CreateItemArray("RowHeight", rows) # 행 m개 생성
each_row_height = total_height - hwp.MiliToHwpUnit(rows)
for i in range(rows):
pset.RowHeight.SetItem(i, each_row_height) # 1열
pset.TableProperties.Height = total_height
pset.CreateItemArray("ColWidth", cols) # 열 n개 생성
each_col_width = total_width - hwp.MiliToHwpUnit(3.6 * cols)
for i in range(cols):
pset.ColWidth.SetItem(i, each_col_width) # 1열
# pset.TableProperties.TreatAsChar = treat_as_char # 글자처럼 취급
pset.TableProperties.Width = total_width # hwp.MiliToHwpUnit(148) # 표 너비 적용
hwp.HAction.Execute("TableCreate", pset.HSet) # 코드 실행
# 글자처럼 취급 여부 적용(treat_as_char)
ctrl = hwp.CurSelectedCtrl or hwp.ParentCtrl
pset = hwp.CreateSet("Table")
pset.SetItem("TreatAsChar", treat_as_char)
ctrl.Properties = pset
고작 표 하나를 만들기 위해
질릴만큼 길고 복잡한 저 API코드를 작성해야 한다는 사실을 알게 되면
(특히 회사원들) 어느 누가 한/글 자동화를 시도할까 싶었습니다.
전부 언급할 수도 없는 상당한 분량의 백그라운드 지식을 알려주는 것도 큰 부담이었습니다.
아래아한글 API의 구조와 실행방법, 파라미터셋 사용법,
파라미터셋의 서브아이템셋을 정의해야 하는 경우와 정의방법,
암호같은 API 문서를 읽는 방법..ㅜ
하여튼 pyhwpx가 나름의 버전업을 거듭해서
0.8 근처까지 왔는데요. 아직 갈 길이 멉니다.
그럼에도 create_table, table_to_df나,
table_from_data, get_into_nth_table, 특히 put_field_text는
한/글 보고서 취합 및 작성 자동화나 엑셀연동에 진심인 분들에게는
정말 파워풀한 메서드일 거라고 자부합니다.
개발기간도 아직 짧은 편이고, 다소 조악해 보일 수 있습니다.
하지만, 정말 수백 건의 문의와 의뢰를 받고 일일이 회신을 드렸던 모든 경험을
pyhwpx 모듈에 하나씩 녹여내고 있습니다.
현재는 블로그에만 pyhwpx 짧은 메서드 사용법 위주로 포스팅하고 있지만,
오는 2024년 2월부터는 작은 프로젝트나, 의뢰/문의내용을 토대로
pyhwpx의 활용방법을 차근차근 영상과 포스팅으로 풀어볼 예정입니다.
많은 관심 부탁드립니다.
감사합니다.
행복한 하루 되세요!
'아래아한글 자동화 > pyhwpx 사용법' 카테고리의 다른 글
[pyhwpx] 폰트 설정을 위한 set_font 메서드 (1) | 2024.01.26 |
---|---|
[pyhwpx] 파이썬 정규식으로 찾아바꾸기 (4) | 2024.01.23 |
[크롤링 연계2] 보건소 정보로 한/글 파일 만들기 (2) | 2024.01.23 |
댓글