[ 한글 자동화 ] 파이썬으로 한글 문서 끼워넣기 자동화하기
📑 목차
한글 문서 끼워넣기란?
한글 문서 끼워넣기는 기존 문서에 다른 문서의 내용을 삽입하는 기능입니다.
이 기능을 사용하면 여러 개의 문서를 하나로 통합하거나,
보고서에 첨부 자료를 추가하는 작업을 쉽게 수행할 수 있습니다.
업무 환경에서는 다양한 부서에서 작성된 문서를 하나로 취합하거나,
정기적으로 보고서를 통합해야 하는 상황이 자주 발생합니다.
이러한 작업을 수동으로 처리하면 많은 시간과 노력이 소요되지만,
파이썬을 활용한 자동화를 통해 효율적으로 처리할 수 있습니다.
한글 문서 100개를 수동으로 끼워넣기 할 경우 약 50분이 소요되지만, 파이썬 자동화를 활용하면 단 1분 내외로 작업을 완료할 수 있습니다!
한글 프로그램에서의 문서 끼워넣기 방법
한글 프로그램에서 문서 끼워넣기를 수동으로 수행하는 방법을 먼저 알아보겠습니다.
이 방법을 이해하면 자동화 코드의 원리를 더 쉽게 이해할 수 있습니다.
한글 프로그램에서 문서 끼워넣기 단계
1. 기본 문서를 엽니다.
2. 문서 내에서 다른 문서를 삽입할 위치로 커서를 이동합니다.
3. 메뉴에서 [입력] → [문서 끼워 넣기]를 선택합니다.
4. 삽입할 문서를 찾아 선택한 후 [열기] 버튼을 클릭합니다.
5. 옵션 창이 나타나면 원하는 설정(글자 모양, 문단 모양, 스타일 등)을 선택하고 [확인]을 클릭합니다.
파이썬을 활용한 자동화의 필요성
수동으로 문서 끼워넣기를 수행하는 것은 소수의 문서에는 효과적일 수 있지만,
많은 수의 문서를 다룰 때는 시간과 노력이 크게 소요됩니다.
특히 다음과 같은 상황에서 파이썬을 활용한 자동화가 큰 도움이 됩니다:
- 여러 개의 보고서를 하나로 통합해야 할 때
- 다수의 첨부 문서를 메인 문서에 삽입해야 할 때
- 정기적으로 같은 형식의 문서를 생성하고 통합해야 할 때
- 여러 부서의 문서를 취합하여 하나의 보고서로 만들 때
파이썬 자동화를 통해 이러한 작업을 빠르고 정확하게 처리할 수 있으며,
사람의 개입을 최소화하여 오류 가능성도 줄일 수 있습니다.
자동화를 위한 준비 사항
한글 문서 끼워넣기 자동화를 위해서는 몇 가지 필수 요소가 필요합니다.
필수 환경 설정
1. 파이썬 설치: 최신 버전의 파이썬을 설치합니다.
2. 한글 프로그램 설치: 한컴오피스 한글 프로그램이 설치되어 있어야 합니다.
3. pywin32 라이브러리 설치: 윈도우 COM 인터페이스를 통해 한글을 제어하기 위한 라이브러리입니다.
pip install pywin32
기본적인 한글 문서 끼워넣기 코드
이제 파이썬을 사용하여 한글 문서 끼워넣기를 자동화하는 기본 코드를 살펴보겠습니다.
한글 객체 생성하기
먼저 한글 객체를 생성하여 한글 프로그램을 제어할 수 있도록 합니다:
import win32com.client as win32
import os
import shutil
def execute_hwp(hwp_visible=True):
try:
hwp = win32.gencache.EnsureDispatch('HWPFrame.HwpObject')
hwp.XHwpWindows.Active_XHwpWindow.Visible = hwp_visible
return hwp
except:
# 캐시 문제 발생 시 캐시 삭제 후 재시도
cache_dir = win32.gencache.GetGeneratePath()
if os.path.exists(cache_dir):
shutil.rmtree(cache_dir)
hwp = win32.gencache.EnsureDispatch('HWPFrame.HwpObject')
hwp.XHwpWindows.Active_XHwpWindow.Visible = hwp_visible
return hwp
이 코드는 한글 OLE 객체를 생성하고, 한글 창의 표시 여부를 설정합니다.
만약 객체 생성 시 오류가 발생하면 캐시를 삭제하고 다시 시도합니다.
문서 열기
기
존 문서를 열거나 새 문서를 생성하는 함수를 만듭니다:
def load_hwp(hwp, file_path=None):
if file_path:
hwp.Open(os.path.abspath(file_path))
else:
hwp.Run('FileNew')
문서 끼워넣기 구현 - 방법 1: InsertFile 메서드 사용
한글 API에서 제공하는 InsertFile 메서드를 사용하여 문서를 끼워넣는 방법입니다:
def insert_file_at_end(hwp, file_path):
# 문서 끝으로 이동
hwp.Run("MoveDocEnd")
# 새 페이지 삽입
hwp.Run("BreakPage")
# 파일 삽입 (옵션 0: 모든 서식 유지)
hwp.InsertFile(os.path.abspath(file_path), 0)
이 함수는 현재 문서의 끝으로 이동한 후, 새 페이지를 삽입하고 지정된 파일을 현재 위치에 삽입합니다.
문서 끼워넣기 구현 - 방법 2: HAction과 HParameterSet 사용
한글의 HAction과 HParameterSet을 사용하여 더 세밀하게 제어하는 방법입니다:
def insert_file_with_action(hwp, file_path):
# 문서 끝으로 이동
hwp.Run("MoveDocEnd")
# 새 페이지 삽입
hwp.Run("BreakPage")
# InsertFile 액션 기본값 가져오기
hwp.HAction.GetDefault("InsertFile", hwp.HParameterSet.HInsertFile.HSet)
# 파라미터 설정
option = hwp.HParameterSet.HInsertFile
option.filename = os.path.abspath(file_path)
option.KeepSection = 1 # 구역 정보 유지
option.KeepCharshape = 1 # 글자 모양 유지
option.KeepParashape = 1 # 문단 모양 유지
option.KeepStyle = 1 # 스타일 유지
# 액션 실행
hwp.HAction.Execute("InsertFile", hwp.HParameterSet.HInsertFile.HSet)
이 방법은 InsertFile 메서드보다 더 많은 옵션을 제어할 수 있으며, 한글의 내부 액션 시스템을 직접 활용합니다.
고급 기능과 활용 방법
기본적인 끼워넣기 외에도 더 복잡한 작업을 자동화할 수 있습니다.
여러 문서 한 번에 합치기
폴더 내의 모든 한글 파일을 하나로 합치는 기능을 구현해 보겠습니다:
def merge_multiple_files(folder_path, output_path):
hwp = execute_hwp(True)
# 폴더 내 모든 hwp 파일 찾기
hwp_files = [f for f in os.listdir(folder_path) if f.endswith('.hwp')]
if not hwp_files:
print("합칠 한글 파일이 없습니다.")
return
# 첫 번째 파일은 그냥 열기
first_file = os.path.join(folder_path, hwp_files[0])
hwp.Open(os.path.abspath(first_file))
print(f"파일 열기: {hwp_files[0]}")
# 나머지 파일들은 끼워넣기
for i, file in enumerate(hwp_files[1:], 1):
file_path = os.path.join(folder_path, file)
print(f"파일 끼워넣기 ({i}/{len(hwp_files)-1}): {file}")
insert_file_at_end(hwp, file_path)
# 결과 저장
hwp.SaveAs(output_path)
print(f"합친 문서가 {output_path}에 저장되었습니다.")
특정 위치에 문서 삽입하기
문서의 특정 위치(책갈피)에 다른 문서를 삽입하는 기능을 구현해 보겠습니다:
def insert_file_at_bookmark(hwp, file_path, bookmark_name):
# 책갈피로 이동
hwp.MoveToBookmark(bookmark_name, True, True, True)
# 파일 삽입
hwp.InsertFile(os.path.abspath(file_path), 0)
이 함수는 지정된 책갈피 위치로 이동한 후, 해당 위치에 파일을 삽입합니다.
책갈피를 활용하면 템플릿 문서에 여러 파일을 지정된 위치에 자동으로 삽입할 수 있어, 정형화된 보고서 생성에 매우 유용합니다.
실전 예제와 코드 분석
실제 업무에서 활용할 수 있는 완전한 예제 코드를 살펴보겠습니다.
예제 1: 폴더 내 모든 한글 문서 합치기
import win32com.client as win32
import os
import shutil
import time
def execute_hwp(hwp_visible=True):
try:
hwp = win32.gencache.EnsureDispatch('HWPFrame.HwpObject')
hwp.XHwpWindows.Active_XHwpWindow.Visible = hwp_visible
return hwp
except:
cache_dir = win32.gencache.GetGeneratePath()
if os.path.exists(cache_dir):
shutil.rmtree(cache_dir)
hwp = win32.gencache.EnsureDispatch('HWPFrame.HwpObject')
hwp.XHwpWindows.Active_XHwpWindow.Visible = hwp_visible
return hwp
def insert_file_at_end(hwp, file_path):
# 문서 끝으로 이동
hwp.Run("MoveDocEnd")
# 새 페이지 삽입
hwp.Run("BreakPage")
# 파일 삽입
hwp.InsertFile(os.path.abspath(file_path), 0)
# 안정성을 위한 대기
time.sleep(0.5)
def merge_hwp_files_in_folder(folder_path, output_file, sort_by_name=True):
# 한글 객체 생성
hwp = execute_hwp(True)
# 폴더 내 모든 hwp 파일 찾기
hwp_files = [f for f in os.listdir(folder_path) if f.lower().endswith('.hwp')]
# 파일명으로 정렬 (선택사항)
if sort_by_name:
hwp_files.sort()
if not hwp_files:
print("합칠 한글 파일이 없습니다.")
return
# 첫 번째 파일 열기
first_file = os.path.join(folder_path, hwp_files[0])
hwp.Open(os.path.abspath(first_file))
print(f"파일 열기: {hwp_files[0]}")
# 나머지 파일 끼워넣기
for i, file in enumerate(hwp_files[1:], 1):
file_path = os.path.join(folder_path, file)
print(f"파일 끼워넣기 ({i}/{len(hwp_files)-1}): {file}")
insert_file_at_end(hwp, file_path)
# 결과 저장
output_path = os.path.abspath(output_file)
hwp.SaveAs(output_path)
print(f"\n작업 완료! 파일이 저장되었습니다: {output_path}")
return output_path
# 실행 예시
if __name__ == "__main__":
# 합칠 파일이 있는 폴더 경로
source_folder = r"C:\Documents\Reports"
# 결과 파일 저장 경로
output_file = r"C:\Documents\Combined_Report.hwp"
# 실행
merge_hwp_files_in_folder(source_folder, output_file)
예제 2: HAction과 HParameterSet을 활용한 문서 끼워넣기
import win32com.client as win32
import os
import shutil
import time
def execute_hwp(hwp_visible=True):
try:
hwp = win32.gencache.EnsureDispatch('HWPFrame.HwpObject')
hwp.XHwpWindows.Active_XHwpWindow.Visible = hwp_visible
return hwp
except:
cache_dir = win32.gencache.GetGeneratePath()
if os.path.exists(cache_dir):
shutil.rmtree(cache_dir)
hwp = win32.gencache.EnsureDispatch('HWPFrame.HwpObject')
hwp.XHwpWindows.Active_XHwpWindow.Visible = hwp_visible
return hwp
def insert_file_with_action(hwp, file_path):
# 문서 끝으로 이동
hwp.Run("MoveDocEnd")
# 새 페이지 삽입
hwp.Run("BreakPage")
# InsertFile 액션 기본값 가져오기
hwp.HAction.GetDefault("InsertFile", hwp.HParameterSet.HInsertFile.HSet)
# 파라미터 설정
option = hwp.HParameterSet.HInsertFile
```html
option.filename = os.path.abspath(file_path)
option.KeepSection = 1 # 구역 정보 유지
option.KeepCharshape = 1 # 글자 모양 유지
option.KeepParashape = 1 # 문단 모양 유지
option.KeepStyle = 1 # 스타일 유지
# 액션 실행
hwp.HAction.Execute("InsertFile", hwp.HParameterSet.HInsertFile.HSet)
# 안정성을 위한 대기
time.sleep(0.5)
def merge_selected_files(file_list, output_file):
# 한글 객체 생성
hwp = execute_hwp(True)
if not file_list:
print("합칠 파일이 없습니다.")
return
# 첫 번째 파일 열기
hwp.Open(os.path.abspath(file_list[0]))
print(f"첫 번째 파일 열기: {os.path.basename(file_list[0])}")
# 나머지 파일 끼워넣기
for i, file_path in enumerate(file_list[1:], 1):
print(f"파일 끼워넣기 ({i}/{len(file_list)-1}): {os.path.basename(file_path)}")
insert_file_with_action(hwp, file_path)
# 결과 저장
hwp.SaveAs(os.path.abspath(output_file))
print(f"\n작업 완료! 파일이 저장되었습니다: {output_file}")
return output_file
# 실행 예시
if __name__ == "__main__":
# 합칠 파일 목록
files_to_merge = [
r"C:\Documents\Report1.hwp",
r"C:\Documents\Report2.hwp",
r"C:\Documents\Appendix1.hwp",
r"C:\Documents\Appendix2.hwp"
]
# 결과 파일 저장 경로
output_file = r"C:\Documents\Final_Report.hwp"
# 실행
merge_selected_files(files_to_merge, output_file)
고급 기능과 활용 방법
한글 문서 끼워넣기 자동화를 더욱 효과적으로 활용할 수 있는 고급 기능들을 살펴보겠습니다.
파일 삽입 옵션 제어하기
한글의 InsertFile 메서드나 HAction을 사용할 때 다양한 옵션을 설정할 수 있습니다:
def insert_file_with_options(hwp, file_path, option_type=0):
"""
option_type 값:
0: 모두 가져오기(글자 모양, 문단 모양, 스타일)
1: 글자 모양만 가져오기
2: 문단 모양만 가져오기
3: 스타일만 가져오기
"""
# 문서 끝으로 이동
hwp.Run("MoveDocEnd")
# 새 페이지 삽입
hwp.Run("BreakPage")
# 파일 삽입 (옵션 지정)
hwp.InsertFile(os.path.abspath(file_path), option_type)
결론 및 활용 방안
파이썬을 활용한 한글 문서 끼워넣기 자동화는
반복적인 문서 작업을 획기적으로 줄여줄 수 있는 강력한 도구입니다.
이 글에서 소개한 방법을 활용하면 수십, 수백 개의 문서를 단 몇 분 만에 하나로 합칠 수 있습니다.
자동화의 주요 이점
- 시간 절약: 수작업 대비 90% 이상의 시간 절약
- 오류 감소: 사람의 개입을 최소화하여 오류 가능성 감소
- 일관성 유지: 동일한 방식으로 문서를 처리하여 결과물의 일관성 확보
- 업무 효율성 향상: 반복 작업에서 벗어나 더 중요한 업무에 집중 가능
활용 가능한 업무 영역
- 정기 보고서 통합: 여러 부서의 보고서를 하나로 통합
- 공문서 작성: 표준 양식에 다양한 첨부 문서 삽입
- 계약서 생성: 표준 계약서에 특정 조항이나 부록 삽입
- 교육 자료 제작: 여러 교육 자료를 하나의 문서로 통합
- 연구 보고서 작성: 다양한 연구 결과를 하나의 보고서로 통합
[ 파이썬 관련 블로그 글 목록 ]
파이썬(Python) 블로그 목록