• 카테고리

    질문 & 답변
  • 세부 분야

    업무 자동화

  • 해결 여부

    해결됨

exe 배포 파일 코드 작동 안함

24.03.10 15:03 작성 조회수 104

1

안녕하십니까 항상 도움 많이 받고 있습니다.

강의를 들으면서 아래와 같이 코드를 작성하였고(정상 작동함)

배포 파일을 만들어서 실행하여 보니, 특성 코드가 작동이 안됩니다.

 

import tkinter as tk

from tkinter import filedialog

import win32com.client as win32

from pyhwpx import Hwp

hwp = Hwp()

excel = win32.gencache.EnsureDispatch("Excel.Application")

excel.Visible = False

# 한/글 파일 불러오기

def open_hwp_file():

file_path = filedialog.askopenfilename(initialdir="C:/", title="Select HWP File", filetypes=(("HWP files", "*.hwp"), ("all files", "*.*")))

if file_path:

hwp.Open(file_path)

# 엑셀 파일 불러오기

def open_excel_file():

file_path = filedialog.askopenfilename(initialdir="C:/", title="Select Excel File", filetypes=(("Excel files", "*.xlsx;*.xlsm"), ("all files", "*.*")))

if file_path:

wb = excel.Workbooks.Open(file_path)

def process_excel():

wb = excel.ActiveWorkbook # 불러온 엑셀파일을 wb로 지정

ws = wb.Worksheets(3) # wb의 3번째 시트를 ws로 지정

xlsx_values = [list(i) for i in ws.UsedRange()]

for idx, val in enumerate(xlsx_values):

if idx:

xlsx_values[idx][0] = xlsx_values[idx][0].strftime("%Y. %#m. %#d.")

for idx, val in enumerate(xlsx_values[1:]): # hwp.get_field_list()로 삽입된 필드명 확인 후, 상황에 맞게 아래 코드의 필드명 수정

hwp.PutFieldText(f"보도일자{{{{{idx}}}}}\x02기사1{{{{{idx}}}}}\x02기사2{{{{{idx}}}}}\x02기사3{{{{{idx}}}}}\x02기사4{{{{{idx}}}}}\x02기사5{{{{{idx}}}}}\x02기사6{{{{{idx}}}}}\x02기사7{{{{{idx}}}}}\x02기사8{{{{{idx}}}}}\x02기사9{{{{{idx}}}}}\x02기사10{{{{{idx}}}}}\x02기사11{{{{{idx}}}}}\x02기사12{{{{{idx}}}}}\x02기사13{{{{{idx}}}}}\x02기사14{{{{{idx}}}}}\x02기사15{{{{{idx}}}}}\x02기사16{{{{{idx}}}}}\x02기사17{{{{{idx}}}}}\x02기사18{{{{{idx}}}}}\x02기사19{{{{{idx}}}}}\x02기사20{{{{{idx}}}}}\x02기사21{{{{{idx}}}}}\x02기사22{{{{{idx}}}}}\x02기사23{{{{{idx}}}}}\x02기사24{{{{{idx}}}}}\x02기사25{{{{{idx}}}}}\x02기사26{{{{{idx}}}}}\x02기사27{{{{{idx}}}}}\x02기사28{{{{{idx}}}}}\x02기사29{{{{{idx}}}}}\x02기사30{{{{{idx}}}}}", "\x02".join(val))

def save_as():

hwp.save_as("보도자료 배포용(취합본).hwp")

root = tk.Tk()

root.title("보도자료 취합(배포용)")

button_style = {"font": ("Arial", 15), "padx": 20, "pady": 10}

open_hwp_button = tk.Button(root, text="한글) 파일 열기", command=open_hwp_file, **button_style)

open_hwp_button.pack()

open_excel_button = tk.Button(root, text="엑셀) 파일 열기", command=open_excel_file, **button_style)

open_excel_button.pack()

process_excel_button = tk.Button(root, text=" 취합 하기 ", command=process_excel, fg="blue", font=("Arial", 15, "bold"), padx=20, pady=10)

process_excel_button.pack()

process_excel_button = tk.Button(root, text="다른 이름 저장", command=save_as, ** button_style)

process_excel_button.pack()

root.mainloop()

 

위 코드에서 " 취합하기" 버튼을 누르면 엑셀에 있는 값들이 한글 문서 필드로 입력이 안됩니다. (아무 변화 없음)

* 파일 열기나 다른 이름으로 저장하는 버튼을 누르면 정상 작동합니다.

 

취합하는 것만 안되는 이유가 뭘까요?

 

항상 친절히 답변 남겨 주셔서 너무 감사드립니다.

 

답변 1

답변을 작성해보세요.

1

형주님 안녕하세요?

보통은 exe컴파일 전에 잘 실행됐다면 후에도 잘 실행되어야 합니다.

간혹 날짜서식이 있는 엑셀문서와 연동하는 경우에 임포트에러가 날 때가 있는데,
엑셀문서도 잘 불러와진다고 하니 그 문제는 아닌 것 같습니다.

 

형주님 보여주신 코드에 맞게 예제문서를 만들고
컴파일해서 실행해봤는데, 잘 삽입되기는 하거든요..

image

엑셀파일은 아래와 같이 만들었고

image

한/글 파일은 아래와 같이 만들었는데요.

image

혹시 괜찮으시다면, 오류재현을 할 수 있게 엑셀파일이랑 한/글 파일을
제 메일로 한 번 보내주시면 테스트해보고 방법을 알려드리고 싶은데요.
martinii.fun@지메일로 예제문서를 한 번 보내주세요^^

 

팁>

넘 예쁘게 GUI를 잘 짜셨네요^^
근데 GUI 종료시에 엑셀문서를 닫고 엑셀프로그램을 종료하는 코드를 꼭 넣어주셔야 해요ㅜ
상황에 따라서는 한/글도 종료해 주셔야 하고요.
안그러면 백그라운드 프로세스로 해당 문서가 계속 열려 있게 돼요ㅜㅜㅜ