해결된 질문
작성
·
51
1
def create_word_meaning_table(hwp, words_info):
rows = len(words_info) + 1 # +1 for header
cols = 6 # Adding a column for the number
print(f"Creating table with {rows} rows and {cols} columns")
height = 0 # height 기본값 초기화
treat_as_char = 0 # 글자처럼 취급
width_type = 0 # 너비 지정(0:단에맞춤, 1:문단에맞춤, 2:임의값)
height_type = 0 # 높이 지정(0:자동, 1:임의값)
# Create table
pset = hwp.HParameterSet.HTableCreation
hwp.HAction.GetDefault("TableCreate", pset.HSet)
pset.Rows = rows
pset.Cols = cols
pset.WidthType = width_type
pset.HeightType = height_type
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.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
hwp.Run("CloseEx") # Exit table
hwp.Run("BreakPara") # Add a new line after the table
표(전체)의 정렬이나 셀 정렬을 하려면 어떻게 해야할까요?
답변 2
1
성봉님 안녕하세요?
답변이 늦어 죄송합니다.
표의 전체 셀이나 일부 셀을 정렬하는 기능은
표 생성 시점에는 조절이 불가능합니다. (파라미터에 없기 때문입니다.)
대신, 작성하신 코드로 표를 생성하시고 난 이후에
다시 표를 선택하여 정렬을 하셔야 합니다.
간단히 예를 들어보면,
지금 작성하신 코드는 표 생성 후 밖으로 나오는(CloseEx) 라인이 포함되어 있는데
그 직전(함수를 실행한 직후)에는 커서가 표의 A1 셀에 위치하고 있는 상태입니다.
그 상태에서 아래 코드를 실행하면 모든 셀이 중앙정렬됩니다.
hwp.HAction.Run("SelectCtrlFront") # 표 컨트롤 선택
hwp.HAction.Run("ParagraphShapeAlignCenter") # 중앙정렬
hwp.HAction.Run("CloseEx") # 표 앞으로 빠져나가기
이런 경우에는 직접 선택 및 이동 후 정렬을 실행해야 합니다.
예를 들어, 1행과 1열만 중앙정렬하고 싶으신 경우에는
다소 번거롭지만 아래와 같이 코드를 짜셔야 합니다.
# 표 생성 완료 직후 캐럿이 A1 셀에 있는 상태에서
hwp.HAction.Run("TableCellBlock") # 셀 선택
hwp.HAction.Run("TableCellBlockExtend") # 셀 선택 확장
hwp.HAction.Run("TableColEnd") # 1행 전체 선택
hwp.HAction.Run("ParagraphShapeAlignCenter") # 중앙정렬
hwp.HAction.Run("TableColBegin") # A1셀로 돌아와서
hwp.HAction.Run("TableColPageDown") # 1열 전체 선택
hwp.HAction.Run("ParagraphShapeAlignCenter") # 중앙정렬
hwp.HAction.Run("CloseEx") # 표 빠져나가기
이런 식으로요.
treat_as_char가 True인 경우에는
표 안에서 CloseEx
를 실행했을 때
표 우측이 아니라 좌측으로 빠져나오게 되므로 이 점을 유의하셔야 합니다.
BreakPara
실행시 표 위에 줄바꿈을 만들어버리거든요.
만약 현재 작성중인 표가 문서 끝에 있는 경우에는 코드 마지막의
hwp.HAction.Run("CloseEx")
hwp.HAction.Run("BreakPara")
대신에
hwp.HAction.Run("MoveDocEnd")
hwp.HAction.Run("BreakPara")
등의 코드를 사용하시는 걸 추천드립니다.
도움이 되었으면 좋겠습니다.
추가로 궁금한 부분은 댓글 남겨주세요.
셀의 폰트와 크기를 설정하는 코드는 다소 길지만 복잡하지는 않습니다.
먼저 제가 한 가지 추천드리기는, pyhwpx
라는 모듈을 추가로 설치해서
사용해보시기를 바랍니다.
아래 pyhwpx 코드는
한/글을 실행하고
4x4의 "글자처럼 취급"이 꺼진 표를 추가한 후
(모든 셀에 숫자 하나씩을 넣고)
표의 모든 셀 폰트를 휴먼명조, 크기는 20pt로 변경하는 예시코드입니다.
from pyhwpx import Hwp
hwp = Hwp()
hwp.create_table(4, 4, treat_as_char=False)
for i in range(16):
hwp.insert_text(i)
hwp.TableRightCell()
hwp.SelectCtrlFront()
hwp.set_font(FaceName="휴먼명조", Height=20)
기존 win32com으로 한/글을 실행했을 때와
동일한 명령어를 사용하실 수 있고,
몇 가지 도움이 되는 함수를 추가한 방식이어서
가급적 pyhwpx를 사용하시는 걸 추천드립니다^^
기존 win32com 패키지로 조작하시려면
문자열을 입력하기 직전이나, 셀을 선택한 상태에서
아래 코드를 실행하시면 됩니다.
동일하게 "휴먼명조", "20pt"로 변경하는 예제입니다.
# hwp.SelectCtrlFront() # 표 전체를 선택하는 경우
pset = hwp.CharShape
pset.SetItem("Height", hwp.PointToHwpUnit(20))
pset.SetItem("FaceNameUser", "휴먼명조")
pset.SetItem("FaceNameSymbol", "휴먼명조")
pset.SetItem("FaceNameOther", "휴먼명조")
pset.SetItem("FaceNameJapanese", "휴먼명조")
pset.SetItem("FaceNameHanja", "휴먼명조")
pset.SetItem("FaceNameLatin", "휴먼명조")
pset.SetItem("FaceNameHangul", "휴먼명조")
hwp.CharShape = pset
※ 다만 TTF폰트가 아닌 HTF폰트(신명조, 중고딕 등)로 서체를 변경하는 경우에는
이렇게 단순하지 않으므로ㅜ pyhwpx의 set_font 메서드를 활용하시는 걸 추천드립니다.
도움이 되었으면 좋겠습니다.
행복한 하루 되세요!!
1
안녕하세요, 인프런 AI 인턴입니다. 성봉님.
표 또는 셀의 정렬 속성을 설정하는 방법에 대해 이미 제공된 답변 중 유사한 내용을 확인했습니다.
아래 두 게시물을 참고해 주세요:
한글-파이썬 : 바탕쪽, 다단: 이 게시물에는 표의 셀 속성을 설정하는 예제 코드가 포함되어 있습니다. 특히 다단 설정과 관련된 부분에서 파라미터를 설정하는 방법을 참고하면 도움 됩니다.
안녕하세요 표 생성이 막힙니다.: 이 게시물에서는 표를 생성하고 속성을 설정하는 방법에 대한 상세한 설명이 포함되어 있습니다. 특히, 표의 각 열 또는 행의 속성을 설정하는 부분을 참고하면 됩니다.
hwp.HParameterSet.HTableCreation
을 이용하여 표 생성 파라미터를 설정한 후, RowHeight
와 ColWidth
를 설정하여 행과 열의 높이와 너비를 지정할 수 있습니다.pset
을 사용하여 셀 속성을 설정할 수 있습니다.셀의 정렬 속성을 설정하려면 다음과 같은 방법을 참고하세요:
def set_table_cell_alignment(hwp, row, col, alignment="Center"):
hwp.MoveToCell(row, col)
pset = hwp.HParameterSet.HShapeObject
hwp.HAction.GetDefault("CellAlign", pset.HSet)
pset.AlignB = alignment # "Center", "Left", "Right" 등의 값을 사용할 수 있습니다
hwp.HAction.Execute("CellAlign", pset.HSet)
# 예제 용도
# 원하는 위치에 셀 정렬 설정
set_table_cell_alignment(hwp, 0, 0, "Center") # 첫 번째 셀을 중앙 정렬로 설정
위 예제에서 MoveToCell
은 원하는 위치의 셀로 이동하여 그 셀의 정렬 속성을 설정하게 됩니다.
위 게시물과 내용을 참고하시면서 코드 구현에 활용해 보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
엄청난! 도움이 되었습니다. 얼마전 네이버블로그에서 일상소식을 읽었는데 공감되었습니다.
저도 외동딸이 하나 있는데..... 건강해야죠.... 건강하세요! ㅎㅎㅎ
표와 셀의 폰트나 크기등을 적용하려면 어떻게 해야할까요?