inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

표안에 셀 정렬속성은 어떻게 하나요?

해결된 질문

403

정성봉

작성한 질문수 6

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

표(전체)의 정렬이나 셀 정렬을 하려면 어떻게 해야할까요?

 

 

 

python 한컴오피스

답변 2

1

일코

성봉님 안녕하세요?

답변이 늦어 죄송합니다.

 

표의 전체 셀이나 일부 셀을 정렬하는 기능은

표 생성 시점에는 조절이 불가능합니다. (파라미터에 없기 때문입니다.)

 

대신, 작성하신 코드로 표를 생성하시고 난 이후에

다시 표를 선택하여 정렬을 하셔야 합니다.

 

간단히 예를 들어보면,

지금 작성하신 코드는 표 생성 후 밖으로 나오는(CloseEx) 라인이 포함되어 있는데

그 직전(함수를 실행한 직후)에는 커서가 표의 A1 셀에 위치하고 있는 상태입니다.

 

그 상태에서 아래 코드를 실행하면 모든 셀이 중앙정렬됩니다.

hwp.HAction.Run("SelectCtrlFront")  # 표 컨트롤 선택
hwp.HAction.Run("ParagraphShapeAlignCenter")  # 중앙정렬
hwp.HAction.Run("CloseEx")  # 표 앞으로 빠져나가기
녹화_2024_09_22_20_05_42_584.gif

 

만약 특정 행이나 열만 (혹은 특정 셀만) 정렬하고 싶으시다면

이런 경우에는 직접 선택 및 이동 후 정렬을 실행해야 합니다.

 

예를 들어, 1행과 1열만 중앙정렬하고 싶으신 경우에는

image.png

다소 번거롭지만 아래와 같이 코드를 짜셔야 합니다.

# 표 생성 완료 직후 캐럿이 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")  # 표 빠져나가기

이런 식으로요.

녹화_2024_09_22_20_19_17_641.gif

 

마지막으로,

treat_as_char가 True인 경우에는

표 안에서 CloseEx를 실행했을 때

표 우측이 아니라 좌측으로 빠져나오게 되므로 이 점을 유의하셔야 합니다.

BreakPara 실행시 표 위에 줄바꿈을 만들어버리거든요.

만약 현재 작성중인 표가 문서 끝에 있는 경우에는 코드 마지막의

hwp.HAction.Run("CloseEx")
hwp.HAction.Run("BreakPara")

대신에

hwp.HAction.Run("MoveDocEnd")
hwp.HAction.Run("BreakPara")

등의 코드를 사용하시는 걸 추천드립니다.

 

도움이 되었으면 좋겠습니다.

추가로 궁금한 부분은 댓글 남겨주세요.

 

1

정성봉

엄청난! 도움이 되었습니다. 얼마전 네이버블로그에서 일상소식을 읽었는데 공감되었습니다.

저도 외동딸이 하나 있는데..... 건강해야죠.... 건강하세요! ㅎㅎㅎ
표와 셀의 폰트나 크기등을 적용하려면 어떻게 해야할까요?

2

일코

셀의 폰트와 크기를 설정하는 코드는 다소 길지만 복잡하지는 않습니다.

먼저 제가 한 가지 추천드리기는, pyhwpx라는 모듈을 추가로 설치해서

사용해보시기를 바랍니다.

 

① pyhwpx로 폰트 변경하기 : hwp.set_font

아래 pyhwpx 코드는

한/글을 실행하고

4x4의 "글자처럼 취급"이 꺼진 표를 추가한 후

(모든 셀에 숫자 하나씩을 넣고)

표의 모든 셀 폰트를 휴먼명조, 크기는 20pt로 변경하는 예시코드입니다.

녹화_2024_09_23_23_23_25_743.gif
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으로 제어하는 경우

기존 win32com 패키지로 조작하시려면

문자열을 입력하기 직전이나, 셀을 선택한 상태에서

아래 코드를 실행하시면 됩니다.

동일하게 "휴먼명조", "20pt"로 변경하는 예제입니다.

녹화_2024_09_23_23_32_21_979.gif
# 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 인턴

안녕하세요, 인프런 AI 인턴입니다. 성봉님.

표 또는 셀의 정렬 속성을 설정하는 방법에 대해 이미 제공된 답변 중 유사한 내용을 확인했습니다.

아래 두 게시물을 참고해 주세요:

  • 한글-파이썬 : 바탕쪽, 다단: 이 게시물에는 표의 셀 속성을 설정하는 예제 코드가 포함되어 있습니다. 특히 다단 설정과 관련된 부분에서 파라미터를 설정하는 방법을 참고하면 도움 됩니다.

  • 안녕하세요 표 생성이 막힙니다.: 이 게시물에서는 표를 생성하고 속성을 설정하는 방법에 대한 상세한 설명이 포함되어 있습니다. 특히, 표의 각 열 또는 행의 속성을 설정하는 부분을 참고하면 됩니다.

코드 예제 요약

  • hwp.HParameterSet.HTableCreation을 이용하여 표 생성 파라미터를 설정한 후, RowHeightColWidth를 설정하여 행과 열의 높이와 너비를 지정할 수 있습니다.
  • 셀 단위의 속성은 표가 생성된 후 셀을 선택한 다음 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은 원하는 위치의 셀로 이동하여 그 셀의 정렬 속성을 설정하게 됩니다.

위 게시물과 내용을 참고하시면서 코드 구현에 활용해 보세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

1

일코

음... 좋은 제안 감사합니다.

아직 구현이 되어 있는 기능은 아니지만^^;

추가하고 싶은 기능이네요.

 

섹션7과 같은 수학 수식을 백지에서 시작할 때 어떻게 만들 수 있을까요?

0

76

1

hwp 병렬 작업시 클립보드 충돌문제

0

58

1

본문을 각주로 내리는 법

1

93

1

한글 자동화 삽도 삽입!!

1

384

2

한글 표 내부 위치 찾는 코드좀 알려주세요 ㅠㅠ

1

233

2

빈 문서를 새로 열때는 팝업이 안나오는데 기존 문서를 열면 팝업이 나옵니다

1

118

2

사무실 컴퓨터ㅠ

0

96

2

글자입력 여러번 실행기

0

67

1

현재 커서 문단에 아무런 내용이 없는지 확인하기

1

102

1

특정 스타일을 찾아 이동하는 방법

1

162

2

한/글 파일 open 시 '상위 버전에서...' 메세지 안 뜨게 하는 방법?

1

1108

1

win32com 으로 hwp 문자열 검색하기 문의

1

222

2

[응용] 엑셀문서 값을 필드에 입력하기 질

1

123

1

표 병합하기 관련

0

140

0

메타태그 삽입 자동화

0

191

1

스크립트 매크로 초기화 하고 싶습니다.

1

270

2

한글 창이 여러 개 존재할 때 pyhwpx 모듈로 접근하는 방법을 알고 싶습니다.

1

271

1

표안의 특정 필드에 있는 이미지를 복사하여 한글 외부에 저장하기

1

273

2

스타일 싹 다 지우고 바탕글로 통일하는 방법 문의드립니다.

1

283

0

하위의 여러 폴더 중 특정폴더의 사진만 추출하기

1

345

2

한글 수식을 자동으로 넣는 코드를 만들었는데, 수식 사이의 간격이 계속 벌어집니다.

1

658

1

보유 특허 검색 페이지에서 검색이 되지 않습니다.

1

139

1

hwp 페이지별 분할 저장하는 코드 관련 문의

0

447

0

한글 문서에 사용된 폰트명 추출

1

646

1