🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    업무 자동화

  • 해결 여부

    해결됨

셀필드 응용 질문

23.11.15 22:31 작성 조회수 273

1

안녕하세요! 매번 말만 듣던 파이썬을 덕분에 한글 자동화로 잘 배우고 있습니다. 강의를 들으면서 따라하던 중 한가지 혼자 시도해보고 있는 부분이 있는데 영 어럅네요 ㅠㅠ엑셀 문서의 내용을 한글 셀필드로 입력시킬 때 혹시 창을 띄워서 ‘다음’ 버튼을 눌렀을 때 해당 데이터로 한글문서가 실시간 변경되도록 설정할 수 있을까요?

답변 2

·

답변을 작성해보세요.

1

HR님 안녕하세요?

말씀하신 부분은 가능할 것 같습니다.
다만, 조금만 더 상세히 알려주시면 좋겠습니다.
우선 한/글에서 별도의 모듈 없이 대화상자를 띄우는 명령어가 있습니다.

시연화면은 아래와 같고,

image

코드는 아래와 같습니다.

# %pip install hwpx
from hwpx import Hwp

hwp = Hwp()

def 대화상자():
    msgbox = hwp.XHwpMessageBox  # 메시지박스 생성
    msgbox.string = "엑셀의 데이터를 한/글 필드에 매핑합니다."  # 메시지 설정
    msgbox.Flag = 1  # [확인, 취소] 버튼 설정
    msgbox.DoModal()  # 메시지박스 띄워주기
    return msgbox.Result  # 선택값 리턴

result = 대화상자()
if result == 1:
    print("필드 업데이트 완료")
elif result == 2:
    print("취소")

 

다만, 버튼이 계속해서 떠 있어야 하고, 여러 번 "다음" 버튼을 눌러야 하는 경우라면
tkinter나 PyQt 같은 별도의 GUI 모듈을 사용해서 다이얼로그를 생성해줘야 합니다.
작업하시고자 하는 내용에 대해 조금만 더 상세히 알려주시면
추가로 도움드릴 수 있을 것 같습니다.

 

행복한 하루 되세요^^

HR님의 프로필

HR

질문자

2023.11.16

답변해주셔서 감사합니다!

우선 좀 더 구체적으로 말씀드리자면, 제가 생각하고 있는 방식은 '버튼이 계속해서 떠 있어야 하고, 여러번 "다음" 버튼을 눌러야 하는 경우'가 맞는 듯 합니다.

예를들면 별도의 GUI가 떠있는 상태에서 셀필드.hwp의 내용이 취미.xlsx상의 '마크, 남, 1984년 05월 14일, VR' 의 내용으로 채워진 상태에서, GUI에서 다음 버튼을 누르면 실시간으로 '빌, 남, 1955년 10월 28일, 기부'로 바뀌는 상태를 희망하고 있습니다 ㅠㅠ

0

간단히 아래와 같이 코딩해보았습니다.

코드 자체가 복잡하지는 않지만, HR님의 실행환경에 따라

다소간 코드 수정이 필요하실 듯 싶습니다.

시연화면은 아래와 같고,

image

사용한 코드는 아래와 같습니다.

import os
import tkinter as tk
from hwpx import Hwp
import pandas as pd


hwp = Hwp()
hwp.open(os.path.join(os.getcwd(), "target.hwp"))
df = pd.read_excel("./취미.xlsx")


def get_row_num(df):
    return df[df["이름"]==hwp.get_field_text("이름")].index[0]


def set_next(df):
    cur_col = get_row_num(df)
    hwp.put_field_text(
        hwp.get_field_list(),
        "\x02".join(list(df.iloc[(cur_col + 1) % len(df)]))
    )
    

def click(df):
    set_next(df)


win = tk.Tk()

button = tk.Button(win, text="다음", command=lambda: click(df))
button.grid(column=0, row=0)

win.mainloop()

 

궁금하신 부분이 있거나, 실행이 되지 않는다면
추가질문 남겨주시기 바랍니다.

 

행복한 하루 되세요^^

채널톡 아이콘