안녕하세요.
개발자는 아니고 사무 직장인이지만 코딩을 취미 삼아 하다가 현 업무에 적용 해보려 애쓰고 있는데요.
저희 업무 특성 상 100단위 페이지가 아닌 1000단위로 페이지를 구성하는 매뉴얼을 작성 합니다.
그리고 수정 사항이 생길 때 형광펜 기능으로 표시 해서 이력을 남기곤 하는데요… 음 간혹 이 형광펜 기능을 제거 해야 할
경우가 생깁니다. 이럴 경우 수동으로 작업을 해야 하니 여간 불편 하더라고요… 그래서 자동화 프로그램을 만들어보려고 아래와 같은 파이썬 코드를 작성 했습니다.
import PySimpleGUI as sg
import win32com.client
# 한글 HWP 객체 생성 함수
def create_hwp_object():
return win32com.client.Dispatch("HWPFrame.HwpObject")
# 문서 열기 함수
def open_document(hwp, file_path):
hwp.Open(file_path)
# 형광펜 효과가 있는 텍스트 찾기 함수
def find_highlight(hwp):
hwp.HAction.GetDefault("DocFind", hwp.HParameterSet.HFindReplace.HSet)
hwp.HParameterSet.HFindReplace.FindString = ""
hwp.HParameterSet.HFindReplace.IgnoreMessage = 1
hwp.HAction.Execute("DocFindInit", hwp.HParameterSet.HFindReplace.HSet)
while hwp.HAction.Execute("DocFindNext", hwp.HParameterSet.HFindReplace.HSet):
hwp.HAction.GetDefault("CharShape", hwp.HParameterSet.HShapeObject.HSet)
char_shape = hwp.HParameterSet.HShapeObject
if char_shape.MarkPenColor != 0: # 형광펜 색상이 설정된 경우
sg.popup("형광펜 효과를 찾았습니다.")
return
sg.popup("형광펜 효과를 찾을 수 없습니다.")
# 형광펜 효과 제거 함수
def remove_highlight(hwp):
hwp.HAction.GetDefault("CharShape", hwp.HParameterSet.HShapeObject.HSet)
hwp.HParameterSet.HShapeObject.MarkPenShape = 0 # 형광펜 효과 제거
hwp.HAction.Execute("CharShape", hwp.HParameterSet.HShapeObject.HSet)
sg.popup("형광펜 효과가 제거되었습니다.")
# GUI 레이아웃 정의
layout = [
[sg.Text('HWP File Path'), sg.Input(), sg.FileBrowse()],
[sg.Button('Open Document')],
[sg.Button('Find Highlight'), sg.Button('Remove Highlight')],
[sg.Button('Exit')]
]
# GUI 생성
window = sg.Window('HWP Highlighter', layout)
# 한글 HWP 객체 생성
hwp = create_hwp_object()
# GUI 이벤트 루프
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED or event == 'Exit':
break
elif event == 'Open Document':
open_document(hwp, values[0])
elif event == 'Find Highlight':
find_highlight(hwp)
elif event == 'Remove Highlight':
remove_highlight(hwp)
# 프로그램 종료 시 HWP 객체 닫기
hwp.Quit()
window.close()
이렇게 작성을 했는데 음… 형광펜 기능 문장을 검색하는 버튼을 누를 때 마다 인식을 하지 못했다라는 지정된 알림이 뜨곤 합니다. 혹시 잘못된 Action을 사용한 것인지. 왜 인식을 못하는 것인지 도와 주실 수 있을까요…?