PYTHON 한글자동화

[ 한글 자동화 ] 파이썬으로 엑셀 데이터 읽고 한글 문서에 자동 입력하기

나루하루001 2025. 5. 13. 15:13
반응형



소개 및 필요성

 

업무 자동화는 현대 사무 환경에서 필수적인 요소가 되었습니다.


특히 엑셀에 저장된 데이터를 한글 문서에 자동으로 입력하는 작업은

많은 시간을 절약해줄 수 있습니다.


이 글에서는 파이썬을 사용하여 엑셀 파일에서 데이터를 읽고,

이를 한글 문서의 특정 필드에 자동으로 입력하는 방법을 알아보겠습니다.


이러한 자동화는 다음과 같은 상황에서 특히 유용합니다:
- 대량의 문서를 생성해야 할 때 (계약서, 증명서 등)
- 반복적인 데이터 입력 작업이 필요할 때
- 인적 오류를 줄이고 일관성을 유지해야 할 때

💡 알아두세요: 이 코드는 Windows 환경에서만 실행 가능합니다. 한글(HWP) 문서 자동화는 한컴오피스가 설치된 Windows 시스템에서만 작동합니다.



필요한 라이브러리 및 설치 방법

 

이 자동화 스크립트를 실행하기 위해서는 다음 라이브러리들이 필요합니다:

 

필수 라이브러리

# 필요한 라이브러리 설치
pip install pandas
pip install pywin32
pip install openpyxl

 

각 라이브러리의 역할은 다음과 같습니다:
- pandas: 엑셀 파일을 읽고 데이터를 처리하는 데 사용합니다. 강력한 데이터 분석 도구로, 다양한 형식의 데이터를 쉽게 다룰 수 있습니다.
- pywin32: Windows COM 인터페이스를 통해 한글 프로그램을 제어합니다. 이를 통해 한글 문서를 열고, 필드에 데이터를 입력할 수 있습니다.
- openpyxl: pandas가 엑셀 파일(.xlsx)을 읽을 때 내부적으로 사용하는 라이브러리입니다.

📌 주의사항: pywin32 설치 후 처음 실행 시 캐시 문제가 발생할 수 있습니다. 이 코드에는 이러한 문제를 해결하는 로직이 포함되어 있습니다.



Pandas로 엑셀 파일 다루기

 

Pandas는 데이터 분석을 위한 파이썬의 핵심 라이브러리로, 엑셀 파일을 쉽게 읽고 처리할 수 있는 기능을 제공합니다.

 

엑셀 파일 읽기

 

코드에서는 `pd.read_excel()` 함수를 사용하여 엑셀 파일을 DataFrame으로 읽어옵니다.

excel_path = r"C:\Users\karur\Desktop\테스트자료.xlsx"
df = pd.read_excel(excel_path)

 

`read_excel()` 함수는 다양한 매개변수를 제공하여 데이터를 원하는 형태로 불러올 수 있습니다.

기본적으로는 첫 번째 시트의 모든 데이터를 읽어옵니다.

 

엑셀 파일의 데이터는 다음과 같습니다.

 

 

특정 행 선택하기

 

사용자로부터 행 번호를 입력받아 해당 행의 데이터를 선택합니다.

# 사용자 입력 받기
while True:
    user_input = input("데이터를 가져올 행 번호를 입력하세요 (0부터 시작): ")
    
    try:
        row_idx = int(user_input)
        if 0 <= row_idx < len(df):
            break
        else:
            print(f"경고: 인덱스 {row_idx}는 유효한 범위를 벗어납니다. 다시 입력하세요.")
    except ValueError:
        print(f"경고: '{user_input}'는 유효한 숫자가 아닙니다. 다시 입력하세요.")

# 선택한 행의 데이터 가져오기
selected_row = df.iloc[row_idx]

 

여기서 `iloc[]` 메서드는 정수 인덱스를 기준으로 행을 선택합니다.

이 코드는 사용자 입력 유효성 검사를 포함하여 잘못된 입력으로 인한 오류를 방지합니다.

💡 팁: 실제 업무에서는 행 번호 대신 특정 ID나 이름으로 데이터를 검색하는 것이 더 실용적일 수 있습니다. 이 경우 df.loc[df['ID'] == search_id]와 같은 방식으로 데이터를 검색할 수 있습니다.

 

반응형

한글 문서 자동화 기능

 

한글 문서를 자동화하기 위해 pywin32 라이브러리를 사용하여 COM 인터페이스로 한글 프로그램을 제어합니다.

 

한글 객체 생성

def execute_hwp(hwp_visible=True):
    try:
        hwp = win32.gencache.EnsureDispatch('HWPFrame.HwpObject')
        return hwp
    except:
        cache_dir = win32.gencache.GetGeneratePath()
        if os.path.exists(cache_dir):
            shutil.rmtree(cache_dir)

        hwp = win32.gencache.EnsureDispatch('HWPFrame.HwpObject')
        return hwp
    finally:
        if 'hwp' in locals():
            hwp.XHwpWindows.Active_XHwpWindow.Visible = hwp_visible

 

이 함수는 한글 객체를 생성하고, 필요한 경우 캐시 문제를 해결합니다. `hwp_visible` 매개변수를 통해 한글 창을 화면에 표시할지 여부를 결정할 수 있습니다.

 

한글 문서 열기

def load_hwp(hwp, path):
    if not os.path.exists(path):
        print("파일이 존재하지 않습니다.")
        return False
    else:
        hwp.Open(path, "", "")
        return True

 

이 함수는 지정된 경로의 한글 문서를 열고, 파일이 존재하지 않을 경우 오류 메시지를 출력합니다.

 

필드에 데이터 입력

# 필드에 데이터 넣기
field_mapping = {
    "이름": "이름",
    "전화번호": "전화번호",
    "생년월일": "생년월일",
    "이메일": "이메일"
}

for col_name, field_name in field_mapping.items():
    if col_name in selected_row.index:
        value = str(selected_row[col_name])
        hwp.PutFieldText(field_name, value)

 

이 코드는 엑셀의 열 이름과 한글 문서의 필드 이름을 매핑하고,

해당 필드에 데이터를 입력합니다.

 

한글 문서에는 다음과 같이 필드 이름을 지정하였습니다.

 

`PutFieldText()` 메서드는 한글 문서의 지정된 필드에 텍스트를 입력하는 기능을 제공합니다.

📌 중요: 한글 문서에는 미리 필드가 정의되어 있어야 합니다. 한글에서 필드를 삽입하려면 [입력 > 문서 필드 > 누름틀 > 필드 이름 설정]을 사용하세요.



전체 코드 분석

 

이제 전체 코드의 흐름을 단계별로 분석해 보겠습니다.

 

1. 필요한 라이브러리 임포트

 

import win32com.client as win32
import os, shutil
import pandas as pd

 

필요한 모듈을 임포트합니다.

win32com은 COM 인터페이스를 통해 Windows 프로그램을 제어하고, pandas는 데이터 처리를 담당합니다. 

 

2. 한글 제어 함수 정의

def execute_hwp(hwp_visible=True):
    # 한글 객체 생성 코드

def load_hwp(hwp, path):
    # 한글 문서 열기 함수

 

한글을 제어하기 위한 여러 함수들을 정의합니다.

 

3. 메인 실행 부분

if __name__ == "__main__":
    # 엑셀 파일 읽기
    excel_path = r"C:\Users\karur\Desktop\테스트자료.xlsx"
    df = pd.read_excel(excel_path)
    
    # 사용자 입력 및 데이터 선택
    # ...
    
    # 한글 문서 열기 및 데이터 입력
    # ...

 

메인 실행 부분에서는 엑셀 파일을 읽고, 사용자 입력을 받아 선택된 행의 데이터를 한글 문서의 필드에 입력합니다. 

💡 개선 아이디어: 현재 코드는 한 번에 하나의 행만 처리합니다. 여러 행을 선택하여 여러 문서를 한 번에 생성하는 기능을 추가하면 더욱 효율적인 자동화가 가능합니다.

 

4. 전체 코드

 

import win32com.client as win32
import os, shutil
import pandas as pd

def execute_hwp(hwp_visible=True):
    try:
        hwp = win32.gencache.EnsureDispatch('HWPFrame.HwpObject')
        return hwp
    except:
        cache_dir = win32.gencache.GetGeneratePath()
        if os.path.exists(cache_dir):
            shutil.rmtree(cache_dir)

        hwp = win32.gencache.EnsureDispatch('HWPFrame.HwpObject')
        return hwp
    finally:
        if 'hwp' in locals():
            hwp.XHwpWindows.Active_XHwpWindow.Visible = hwp_visible

def load_hwp(hwp, path):
    if not os.path.exists(path):
        print("파일이 존재하지 않습니다.")
        return False
    else:
        hwp.Open(path, "", "")
        return True

if __name__ == "__main__":
    excel_path = r"C:\Users\karur\Desktop\테스트자료.xlsx"
    df = pd.read_excel(excel_path)
    
    # 사용자 입력 받기
    while True:
        user_input = input("데이터를 가져올 행 번호를 입력하세요 (0부터 시작): ")
        
        try:
            row_idx = int(user_input)
            if 0 <= row_idx < len(df):
                break
            else:
                print(f"경고: 인덱스 {row_idx}는 유효한 범위를 벗어납니다. 다시 입력하세요.")
        except ValueError:
            print(f"경고: '{user_input}'는 유효한 숫자가 아닙니다. 다시 입력하세요.")
    
    selected_row = df.iloc[row_idx]
    
    hwp = execute_hwp()
    if load_hwp(hwp, r"C:\Users\karur\Desktop\한글 테스트 문서.hwp"):
        # 필드에 데이터 넣기
        field_mapping = {
            "이름": "이름",
            "전화번호": "전화번호",
            "생년월일": "생년월일",
            "이메일": "이메일"
        }

        for col_name, field_name in field_mapping.items():
            if col_name in selected_row.index:
                value = str(selected_row[col_name])
                hwp.PutFieldText(field_name, value)

 

 

실제 활용 사례

 

이 스크립트는 다양한 업무 환경에서 활용될 수 있습니다. 몇 가지 실제 활용 사례를 살펴보겠습니다.

1. 계약서 자동 생성

 

미리 준비된 계약서 템플릿에 고객 정보를 자동으로 입력하여 개인화된 계약서를 생성할 수 있습니다.
엑셀에 고객 목록을 관리하고, 필요한 고객의 계약서를 빠르게 생성할 수 있습니다.

 

2. 증명서 발급

 

학교나 기관에서 증명서 발급 시 학생/회원 정보를 자동으로 입력하여 증명서를 생성할 수 있습니다.
대량의 증명서 발급 작업을 효율적으로 처리할 수 있습니다.

 

3. 보고서 자동화

 

정기적인 보고서 작성 시 데이터를 자동으로 입력하여 보고서 템플릿을 채울 수 있습니다.
시간을 절약하고 일관된 형식의 보고서를 생성할 수 있습니다.

 

4. 개인화된 안내문

 

고객/회원별 맞춤 안내문을 자동으로 생성할 수 있습니다.
마케팅 캠페인이나 중요 공지사항을 개인화하여 전달할 수 있습니다.

 

📊 효율성 향상: 수작업으로 진행할 경우 한 문서당 약 3-5분이 소요되는 작업을 자동화를 통해 수초 내로 완료할 수 있어, 대량 처리 시 수 시간에서 수십 시간의 작업 시간을 절약할 수 있습니다.



결론 및 추가 개선 방안

 

이 포스팅에서는 파이썬을 사용하여 엑셀 데이터를 읽고 한글 문서에 자동으로 입력하는 방법을 살펴보았습니다.
이러한 자동화는 반복적인 문서 작업을 효율적으로 처리하는 데 큰 도움이 됩니다.

몇 가지 추가적인 기능만 구현한 다음 GUI 요소만 넣으면 하나의 완성된 프로그램이 됩니다.
이미 순수한 한글 자동화는 지금까지 작성한 내용만 알더라도 이 프로그램을 구동하기 위한 구현을 할 수 있습니다.

다만 앞으로는 엑셀, GUI 요소 등 한글 자동화보다는 다른 요소들을 더 알아야 자동화를 완벽하게 구현할 수 있습니다.


이러한 추가 요소들은 파이썬의 다양한 라이브러리를 활용하여 구현할 수 있으며, 

각각의 요소들이 결합되어 더욱 강력한 자동화 솔루션을 만들 수 있습니다. 

[ 파이썬 관련 블로그 글 목록 ] 

파이썬(Python) 블로그 목록
반응형