🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    업무 자동화

  • 해결 여부

    해결됨

한글 점끌기 탭 구현

23.10.20 09:21 작성 23.10.20 09:24 수정 조회수 340

1

강의를 보고 나서...한글서식을 자동하는것을 구현(단순 입력 수준이지만..ㅎㅎ) 해보고 있습니다.

자주쓰는 문서 서식을 자동입력하기 위해...파이썬으로 점끌기 탭을 구현하려고 합니다..

한글에서 스트립트 녹화해서...파이썬으로 코드를 옮겼는데....

에러는 안나는데...한글에 적용이 안됩니다...

hwp.HAction.GetDefault("ParagraphShape", hwp.HParameterSet.HParaShape.HSet)
hwp.HParameterSet.HParaShape.TabDef.CreateItemArray("TabItem", 3)
hwp.HParameterSet.HParaShape.TabDef.TabItem.SetItem(0, hwp.MiliToHwpUnit(200))
hwp.HParameterSet.HParaShape.TabDef.TabItem.SetItem(1, 3)
hwp.HParameterSet.HParaShape.TabDef.TabItem.SetItem(2, 1)
hwp.HAction.Execute("ParagraphShape", hwp.HParameterSet.HParaShape.HSet)

Item(0)은 탭크기(? 위치), Item(1)은 탭선 종류, Item(2)는 방향(? 왼쪽, 오른쪽 등)으로 세개가 한세트라는 것까지는 한글API메뉴얼을 보고 확인은 했는데...

혹시나 MiliToHwpUnit()가 잘못됐나 싶어서..그냥 일반 숫자로 40000으로 입력도 해보고 해도..

해답을 못찾았습니다..

혹시 문제가 있는 부분을 알려 주실수 있을런지요? ㅜㅜ

답변 2

·

답변을 작성해보세요.

1

안녕하세요?

제가 강의 중간에 너무 얄팍하게 다뤄서, 이 부분이 아직 생소하신 것 같습니다ㅜㅜㅜ
> 다른 분들도 이 질문을 많이 참고하시면 좋겠어요...

스크립트녹화 코드가 잘 작동하지 않는 경우
파라미터셋과 서브셋을 모두 변수로 지정해야만
잘 동작하는 경우가 더러 있습니다.

질문 주신 경우도 그런 대표적인 경우인데요.
아래와 같이 실행해보시면 잘 작동할 것입니다.

Set = hwp.HParameterSet.HParaShape
hwp.HAction.GetDefault("ParagraphShape", Set.HSet)
tab_def = Set.TabDef
tab_def.CreateItemArray("TabItem", 3)
tab_def.TabItem.SetItem(0, 80000)
tab_def.TabItem.SetItem(1, 3)
tab_def.TabItem.SetItem(2, 0)
hwp.HAction.Execute("ParagraphShape", Set.HSet)

참고로, tab_def변수는 GetDefault 라인 실행 이후에 선언해야 합니다. 그렇지 않으면 제대로 실행되지 않습니다.
저도 굉장히 오랜 시행착오를 거쳐 알게 된 부분인데, 유독 파이썬에서만 이렇게 코딩해야 하는 것 같습니다.

image

정확한 이유는 잘 모르겠지만,
아마 Set이나 tab_def 같은 변수를 지정하지 않으면
매번 SetItem으로 값을 대입할 때마다 Action과 상관없는 임의의 메모리주소에 (랜덤하게) 들어가버리는 거라고 짐작해봅니다.

답변이 도움이 되었길 바랍니다ㅎㅎㅎ

배재완님의 프로필

배재완

질문자

2024.01.22

^^ 앗..해법을 찾지 못해 한동안 손 놓고 있었는데....

답변 감사합니다...^^

차라리 첨부터 해법처럼..set을 지정해서 사용하는 방법으로 습관을 들리도록 하겠습니다...^^

좀 쉽게 가볼려다....역시 정공법이 최고네요..ㅋㅋ

 

추신: ㅋㅋ..다른 안되던 기능인..글라데이션도 이것으로 해결되었네요..감사합니다.

앞으로 그냥 이폼으로 작성토록 하겠음당..^^

이형주님의 프로필

이형주

2024.03.06

일코님께서 작성해주신 코드 사용 시,

기존에 사용 하던 문서에 적용은 안되는건가요??

 

import win32com.client as win32

hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") # 한/글을 파이썬으로 실행. 에러나면 gen_py 폴더 삭제

hwp.XHwpWindows.Item(0).Visible = True # 한/글 프로그램의 백그라운드 숨김을 해제하는 코드

hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule") # 보안모듈

 

로 새 한글 문서를 연 후, 문의사항을 통해 알려주신 코드를 실행시킬 경우에만 작동이 되더라고요

형주님 안녕하세요?
win32나 pyhwpx 둘 중 어느 걸로 한/글을 여셨든지
HAction과 HParameter를 이용한 매크로 실행은
동일한 코드로 적용하실 수 있습니다.
(다만.. 최신업데이트를 해 주셔야 합니다ㅜ : pip install --upgrade pyhwpx)

현재 최신버전은 0.10.20 입니다.

 

아래는 pyhwpx를 사용한 예시화면

image

from pyhwpx import Hwp

# 한/글 실행
hwp = Hwp()

# 글자크기 설정(40 pt)
hwp.set_font(Height=40)

# 텍스트 삽입
hwp.insert_text("A\t1\r\nB\t2\r\nC\t3\r\nD\t4\r\n")

# 점끌기 탭 구현
hwp.SelectAll()
Set = hwp.HParameterSet.HParaShape
hwp.HAction.GetDefault("ParagraphShape", Set.HSet)
tab_def = Set.TabDef
tab_def.CreateItemArray("TabItem", 3)
tab_def.TabItem.SetItem(0, 80000)
tab_def.TabItem.SetItem(1, 3)
tab_def.TabItem.SetItem(2, 0)
hwp.HAction.Execute("ParagraphShape", Set.HSet)
hwp.Cancel()

 

아래는 win32com을 사용한 예시화면

image

import win32com.client as win32

# 한/글 실행
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Item(0).Visible = True

# 글자크기 조절(40 pt)
pset = hwp.HParameterSet.HCharShape
hwp.HAction.GetDefault("CharShape", pset.HSet)
pset.Height = 40 * 100
hwp.HAction.Execute("CharShape", pset.HSet)

# 텍스트 삽입
pset = hwp.HParameterSet.HInsertText
hwp.HAction.GetDefault("InsertText", pset.HSet)
pset.Text = "A\t1\r\nB\t2\r\nC\t3\r\nD\t4\r\n"
hwp.HAction.Execute("InsertText", pset.HSet)

# 점끌기 탭 구현
hwp.Run("SelectAll")
Set = hwp.HParameterSet.HParaShape
hwp.HAction.GetDefault("ParagraphShape", Set.HSet)
tab_def = Set.TabDef
tab_def.CreateItemArray("TabItem", 3)
tab_def.TabItem.SetItem(0, 80000)
tab_def.TabItem.SetItem(1, 3)
tab_def.TabItem.SetItem(2, 0)
hwp.HAction.Execute("ParagraphShape", Set.HSet)
hwp.Run("Cancel")

 보시다시피 "점끌기 탭 구현" 코드 부분은 동일합니다^^

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.10.22

안녕하세요 배재완 님, 인프런 AI 인턴이에요.

한글 점끌기 탭을 구현하려고 파이썬 코드를 작성하셨는데, 적용이 안되는 문제로 고민 중이시군요. 코드를 보니 실행에는 문제가 없어 보입니다. 그런데 문제가 발생하는 부분을 파악하기 위해서는 더 많은 정보가 필요합니다.

  1. 코드 실행 시 어떤 에러 메시지나 문제가 발생하는지 확인할 수 있을까요?
  2. 사용하신 한글 버전 정보와 한글 API 메뉴얼을 참고하셨다면 버전 정보도 알려주세요.
  3. 점끌기 탭을 적용하려는 문단이나 문서의 어떤 부분에 적용하려고 하는지도 알려주세요.

위의 정보를 제공해 주시면 더 정확한 도움을 드릴 수 있을 것 같습니다. 감사합니다!

배재완님의 프로필

배재완

질문자

2023.10.23

  1. 코드 실행시 에러는 발생하지 않습니다. 다만 한글에 해당 기능(점끌기탭)이 수행되지 않습니다.

  2. 한글 2020사용중이며, API 메뉴얼은 한글과컴퓨터 홈페이지에 현재 게시되어 있는 API 메뉴얼 참고 했습니다.

  3. 문서의 목차 서식에 적용할려고 합니다.

채널톡 아이콘