특정 범위 서체 변경하기 (글자속성변경하기)
안녕하세요? 조금씩 천천히 강의를 따라가고 있습니다 ^^
글자속성 변경하기 챕터에서
특정 범위의 서체 변경하기를 따라 해 보고 있는데요.
빈문서를 만들고,
텍스트를 입력한 다음,
블럭을 설정하고,
charshape = True를 입력하고,
실행시키면
화면에 나오는 것처럼 글자 속성이 변하지 않네요.

참고로 저는 Visual Studio Code로 작업을 하고 있습니다.
추측으로는,
열어 놓은 한글 파일에 접근할 수 있어야 하고
블럭설정한 부분을 읽어야 하는 것 같은데,
이 코드는 빠져 있는 건가요?
멋진 강의 감사합니다! ^^
답변 2
1
상하님, 안녕하세요?
우선, XHwpCharacterShape은
현재 커서 위치 또는 선택영역의 글자속성을 조회하거나 변경할 수 있습니다.
아래는 그 예시입니다.
import win32com.client as win32
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Item(0).Visible = True
# 아래아한글 빈 창이 열림
charshape = hwp.XHwpDocuments.Item(0).XHwpCharacterShape
# 다 타이핑하기 귀찮아서 charshape이라는 변수로 만들어놓음
charshape.Bold = True
pset = hwp.HParameterSet.HInsertText
pset.Text = "Hello world!\r" # \r은 엔터
hwp.HAction.Execute("InsertText", pset.HSet)
# 두꺼운 글자 입력
charshape.Bold = False
pset = hwp.HParameterSet.HInsertText
pset.Text = "Hello world!\r"
hwp.HAction.Execute("InsertText", pset.HSet)
# 얇은 글자 입력
hwp.Run("SelectAll")
charshape.Italic = True
hwp.Run("Cancel")
# 모두 선택 후 이탤릭 적용
단락별로 실행결과를 보여드리기 위해 jupyter로 실행했습니다.

다만, 직접 열어놓은 한/글 창에 파이썬으로 접근하기 위해서는
아래와 같이 다소 긴 코드를 입력해야 합니다.
import win32com.client as win32
import pythoncom
hwp = None
context = pythoncom.CreateBindCtx(0)
running_coms = pythoncom.GetRunningObjectTable()
monikers = running_coms.EnumRunning()
for moniker in monikers:
name = moniker.GetDisplayName(context, moniker)
if name.startswith('!HwpObject.'):
obj = running_coms.GetObject(moniker)
hwp = win32.gencache.EnsureDispatch(
obj.QueryInterface(pythoncom.IID_IDispatch))
hwp.XHwpWindows.Active_XHwpWindow.Visible = True
if not hwp:
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Active_XHwpWindow.Visible = True
위 코드를 실행하면 현재 실행되어 있는 한/글 문서에 hwp라는 변수로 접근 가능하게 되고
작성해두신 자동화 코드를 이어서 실행하시면 됩니다.

참고로,
API나 win32com 특성상 코드가 굉장히 길기 때문에
제가 미리 짜둔 코드를 간편하게 활용하실 수 있도록
pyhwpx라는 파이썬 모듈을 제작하여 배포하고 있습니다.
(`pip install pyhwpx`로 설치 가능합니다.)
win32com으로 생성하는 hwp 객체와 거의 동일한 인터페이스에
(내부적으로는 거의 모두 오토메이션API로 돌아가기 때문입니다.)
몇 가지 편리한 기능을 추가하였으니,
pyhwpx를 사용해보실 것을 추천드립니다.
예를 들어 위의 코드는 아래처럼 실행하실 수 있습니다.

도움이 되었길 바랍니다.
궁금한 점 있으면 언제든 질문 남겨주세요!
행복한 하루 되세요^^
섹션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
1109
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





