안녕하세요
선생님 유튜브, 블로그 강의를 열심히 따라하고 있는 파이썬 초보입니다.
제 업무에 적용해 보려고 열심히 코딩 중인데,
어려움이 생겨 도움을 요청하고자 실례를 무릅쓰고 이렇게 메일 드립니다.
아래 소스를 실행해 보면
hwp.HAction.GetDefault("TableCreate", hwp.HParameterSet.HTableCreation.HSet)
hwp.HParameterSet.HTableCreation.Rows = 3
hwp.HParameterSet.HTableCreation.Cols = 7
hwp.HAction.Execute("TableCreate", hwp.HParameterSet.HTableCreation.HSet)
hwp.HAction.Run("MoveTopLevelEnd")
hwp.HAction.Run("BreakPara")
hwp.HAction.GetDefault("TableCreate", hwp.HParameterSet.HTableCreation.HSet)
hwp.HParameterSet.HTableCreation.Rows = 5
hwp.HParameterSet.HTableCreation.Cols = 5
hwp.HAction.Execute("TableCreate", hwp.HParameterSet.HTableCreation.HSet)
hwp.HAction.Run("MoveTopLevelEnd")
hwp.HAction.Run("BreakPara")
첫번째 표는 잘 만들어집니다만, 두번째 표가 아래처럼 에러가 납니다.
File "d:\Git\test\python study\hwpt.py", line 23, in <module>
hwp.HAction.Execute("TableCreate", hwp.HParameterSet.HTableCreation.HSet)
File "C:\Users\xxxxxx\AppData\Local\Temp\gen_py\3.8\7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0\HAction.py", line 35, in Execute
return self._oleobj_.InvokeTypes(15001, LCID, 1, (11, 0), ((8, 1), (9, 1)),actname
pywintypes.com_error: (-2147417851, '서버에서 예외 오류가 발생했습니다.', None, None)
여러 검색을 해보았습니다만,
안되는 이유를 확인하지 못해 답답하네요
마티니 님께서 도움을 주시면 감사하겠습니다.
행복한 하루 되시길 바랍니다~
우선 위 오류는 TreatAsChar 속성을 설정해주지 않았기 때문에 발생합니다.
hwp.HParameterSet.HTableCreation.TableProperties.TreatAsChar = 1 # 글자처럼 취급
Execute 하기 전에 저 한 줄만 추가해주시면 잘 실행될 것입니다.
다만, 행과 열만 설정하고 실행시 문서여백 등을 무시한, 정말 무식한 표가 만들어지기 때문에,
아래 코드를 참고하여 보완하시길 바랍니다.
감사합니다.
아래아한글 문서 안에 표를 생성하는 코드입니다.
거의 대부분의 업무자동화 경우에는 hwp파일을 미리 만들어두고 복사해서 쓰시겠지만,
동적으로 대량의 표를 행과 열이 다르게 자동생성해야만 할 때 활용하실 수 있겠습니다.
코드 자체는 상당히 직관적이고, 복잡하지 않기 때문에 복사해 두고 쓰실 수 있습니다.
"""
아래의 148mm는 종이여백 210mm에서 60mm(좌우 각 30mm)를 뺀 150mm에다가,
표 바깥여백 각 1mm를 뺀 148mm이다. (TableProperties.Width = 41954)
각 열의 너비는 5개 기준으로 26mm인데 이는 셀마다 안쪽여백 좌우 각각 1.8mm를 뺀 값으로,
148 - (1.8 x 10 =) 18mm = 130mm
그래서 셀 너비의 총 합은 130이 되어야 한다.
아래의 라인28~32까지 셀너비의 합은 16+36+46+16+16=130
표를 생성하는 시점에는 표 안팎의 여백을 없애거나 수정할 수 없으므로
이는 고정된 값으로 간주해야 한다.
"""
#%%
import win32com.client as win32 # COM 임포트
#%%
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject") # 아래아한글 오브젝트 생성
hwp.XHwpWindows.Item(0).Visible = True # 숨김해제
#%%
hwp.HAction.GetDefault("TableCreate", hwp.HParameterSet.HTableCreation.HSet) # 표 생성 시작
hwp.HParameterSet.HTableCreation.Rows = 5 # 행 갯수
hwp.HParameterSet.HTableCreation.Cols = 5 # 열 갯수
hwp.HParameterSet.HTableCreation.WidthType = 2 # 너비 지정(0:단에맞춤, 1:문단에맞춤, 2:임의값)
hwp.HParameterSet.HTableCreation.HeightType = 1 # 높이 지정(0:자동, 1:임의값)
hwp.HParameterSet.HTableCreation.WidthValue = hwp.MiliToHwpUnit(148.0) # 표 너비
hwp.HParameterSet.HTableCreation.HeightValue = hwp.MiliToHwpUnit(150) # 표 높이
hwp.HParameterSet.HTableCreation.CreateItemArray("ColWidth", 5) # 열 5개 생성
hwp.HParameterSet.HTableCreation.ColWidth.SetItem(0, hwp.MiliToHwpUnit(16.0)) # 1열
hwp.HParameterSet.HTableCreation.ColWidth.SetItem(1, hwp.MiliToHwpUnit(36.0)) # 2열
hwp.HParameterSet.HTableCreation.ColWidth.SetItem(2, hwp.MiliToHwpUnit(46.0)) # 3열
hwp.HParameterSet.HTableCreation.ColWidth.SetItem(3, hwp.MiliToHwpUnit(16.0)) # 4열
hwp.HParameterSet.HTableCreation.ColWidth.SetItem(4, hwp.MiliToHwpUnit(16.0)) # 5열
hwp.HParameterSet.HTableCreation.CreateItemArray("RowHeight", 5) # 행 5개 생성
hwp.HParameterSet.HTableCreation.RowHeight.SetItem(0, hwp.MiliToHwpUnit(40.0)) # 1행
hwp.HParameterSet.HTableCreation.RowHeight.SetItem(1, hwp.MiliToHwpUnit(20.0)) # 2행
hwp.HParameterSet.HTableCreation.RowHeight.SetItem(2, hwp.MiliToHwpUnit(50.0)) # 3행
hwp.HParameterSet.HTableCreation.RowHeight.SetItem(3, hwp.MiliToHwpUnit(20.0)) # 4행
hwp.HParameterSet.HTableCreation.RowHeight.SetItem(4, hwp.MiliToHwpUnit(20.0)) # 5행
hwp.HParameterSet.HTableCreation.TableProperties.TreatAsChar = 1 # 글자처럼 취급
hwp.HParameterSet.HTableCreation.TableProperties.Width = hwp.MiliToHwpUnit(148) # 표 너비
hwp.HAction.Execute("TableCreate", hwp.HParameterSet.HTableCreation.HSet) # 위 코드 실행
# hwp.MovePos(3) # 문서 끝으로 이동
'아래아한글 자동화 > python+hwp 중급' 카테고리의 다른 글
[자동화문의] 표 안에 이미지 넣는 작업 (6) | 2020.12.06 |
---|---|
조항 재정렬하기("제?조(조항명)"의 경우) (2) | 2020.12.06 |
현재 셀의 사이즈 알아내기/변경하기 (0) | 2020.11.30 |
댓글