해결된 질문
작성
·
739
답변 4
1
새로운 스타일을 코드로 생성하는 작업은 굉장히 피곤한 작업이기 때문에
직접 특정 스타일이 적용된 템플릿 파일을 미리 만들어 두시는 것을 추천드립니다.
해당 문단에 특정 스타일을 적용하는 코드는 아래와 같이 간단합니다.
def apply_style(style_num):
Act = hwp.CreateAction("Style")
Set = Act.CreateSet()
Act.GetDefault(Set)
Set.SetItem("Apply", style_num)
Act.Execute(Set)
소개해드린 코드를 조합하시면
원하시는 업무자동화 코드를 완성하실 수 있을 겁니다.
구현하시면서 소소하게 막히는 부분이 있으면
추가질문 남겨주시기 바랍니다.
즐거운 업무자동화 하시기 바랍니다!
행복한 하루 되세요^^
1
시연화면을 먼저 보여드립니다.
위와 같이 구현해 보았습니다. 코드는 아래와 같습니다.
기능별로 함수를 작성해 두었는데, 꼭 전부 이해해야 하는 것은 아닙니다.
def get_style() -> int:
"""
등록된 스타일 순서대로 정수인덱스가 매겨져 있습니다.
바탕글 : 0
본문 : 1
개요1 : 2
개요2 : 3
개요3 : 4 ... 이런 식입니다.
이 정수 인덱스를 리턴하는 함수입니다.
"""
Act = hwp.CreateAction("Style")
Set = Act.CreateSet()
Act.GetDefault(Set)
return Set.Item("Apply")
def get_text() -> str:
"""
선택 영역의 텍스트만 추출하는 함수입니다.
단, 글머리는 추출하지 않습니다.
"""
hwp.InitScan(Range=0xff) # "선택 영역만"
state, text = hwp.GetText()
hwp.ReleaseScan()
return text
def get_doc_end_pos() -> tuple[int]:
"""
본문 탐색 while문의 종료 조건으로
"문서 끝 도달시 반복종료"를 구현하기 위해
문서 끝 위치를 미리 추출해 두는 함수입니다.
"""
hwp.Run("MoveDocEnd")
doc_end_pos = hwp.GetPos()
hwp.Run("MoveDocBegin")
return doc_end_pos
def get_style_text(*style_num) -> list[str]:
"""
특정 스타일의 문단 텍스트만 추출하는 메인함수.
`get_style_text(2,3,4)` 식으로 스타일 중복선택 가능.
"""
doc_end_pos = get_doc_end_pos()
style_text_list = []
while True:
if hwp.GetPos() == doc_end_pos:
break
hwp.Run("MoveSelParaEnd")
if get_style() in style_num:
style_text_list.append(get_text())
hwp.Run("MoveNextParaBegin")
return style_text_list
get_style_text
함수를 통해 특정 스타일의 문자열을 추출하실 수 있습니다.
추출한 리스트를 통해 새 문서를 작성하는 코드는 아래와 같습니다.
(이것도 시연화면을 먼저 보여드리겠습니다. 개요1 스타일의 텍스트만 추출하는 경우입니다.)
위 화면에서 사용한 코드는 아래와 같습니다.
import os
def insert_text(text):
"""
문서에 텍스트를 삽입하는 함수입니다.
"""
hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet)
hwp.HParameterSet.HInsertText.Text = text
hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet)
# 위 코드에서 추출한 결과
style2_text = get_style_text(2) # 개요1 스타일에 해당하는 문자열만 추출(스타일 복수선택 가능)
# ['스타일1(개요1) AAA', '스타일1(개요1) DDD', '스타일1(개요1) GGG']
hwp.Run("FileNew") # 빈 문서 생성
for para in style2_text:
insert_text(para + "\r\n") # 텍스트 + 줄바꿈 삽입
hwp.SaveAs(os.path.join(os.getcwd(), "result2.hwp")) # 현재 위치에 다른이름으로 저장
hwp.Run("FileClose")
정확히 의도하신 바와 일치하지 않을 수 있지만,
기본 진행방법은 대체로 위와 비슷할 것입니다.
수정이나 부연이 필요한 부분이 있다면 추가 질문을 남겨주시면
빠르게 검토하도록 하겠습니다.
(미리 추가질문 남겨주신 "특정 스타일을 적용하는 방법"은 이어서 작성해드리겠습니다^^;)
1
약간 업그레이드한 궁금증이 생겨 질문을 드리겠습니다.
원래 문서에 A, B, C, D, E, F, G, H라는 8개의 스타일이 적용되어 있고,
붙여넣기 할 새로운 문서에는 X, Y, Z라는 3개의 스타일을 설정해 놓고
원래 문서의 B스타일이 적용된 텍스트를 복사해서
새로운 문서에 붙여넣기한 후 X라는 스타일을 설정하고,
원래 문서의 F스타일이 적용된 텍스트를 복사해서
새로운 문서에 붙여넣기한 후 Y라는 스타일을 설정하고,
원래 문서의 H스타일이 적용된 텍스트를 복사해서
새로운 문서에 붙여넣기한 후 Z라는 스타일을 설정하여 저장할 수 있는지도 궁금합니다.
-1
안녕하세요, 인프런 AI 인턴이에요. 특정 스타일이 적용된 텍스트만 복사하여 따로 저장하는 방법은 여러 가지가 있습니다.
가장 간단한 방법은 특정 스타일이 적용된 텍스트를 찾아서 복사 후, 다른 곳에 붙여넣는 것입니다. 한글 문서의 경우에는 “찾기” 기능을 사용하여 특정 스타일을 찾을 수 있습니다.
이 방법을 사용하여 각각의 특정 스타일에 해당하는 텍스트를 별도로 저장할 수 있습니다. 다른 방법으로는 프로그래밍 언어나 스크립트를 사용하여 특정 스타일이 적용된 텍스트를 추출하는 방법도 있지만, 이는 상세한 내용을 알아야 하므로 좀 더 구체적인 정보를 제공해주시면 도움을 드릴 수 있을 것 같아요. 필요한 경우, 개발 관련 질문이 있다면 지식 공유자에게 문의해보시는 것도 좋은 방법일 수 있습니다. 수고하세요!
성가신 일일 수 있는데, 이렇게 답변해주셔서 감사합니다.
아직 초보라서... 천천히 살펴보면서 한번 시도해보겠습니다.
좋은 하루되세요~^^