인프런 커뮤니티 질문&답변

김성락님의 프로필 이미지
김성락

작성한 질문수

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

문서의 홀수/짝수 페이지만 삭제하기

한글 2014버전의 경우 이 기능은 사용이 어렵나요?

작성

·

73

1

안녕하세요 일코님

현재 문서 홀수/짝수 페이지 삭제 기능을 구현하려고 하는데요

한글 2014에서는 이 기능 사용은 어려운가요?

pset = hwp.CreateSet() 에서 계속 알 수 없는 오류가 나옵니다

답변 2

1

일코님의 프로필 이미지
일코
지식공유자

성락님 안녕하세요?

한글2014에서 안 되는 건 "CopyPage"와 "DeletePage" 정도이고

다른 건 정상 실행되어야 맞습니다.

 

pset = hwp.CreateSet이라고 실행하지 마시고

act = hwp.CreateAction("액션이름")
pset = act.CreateSet()
# pset 파라미터 설정 후
act.Execute(pset)

이런 식으로 실행하시면 됩니다.

 

어떤 액션을 시도 중이신지 알려주시면

(혹은 작성중이신 코드를 알려주시면)

한글 2014에서도 돌아갈 수 있게 도움을 드리고 싶습니다.

김성락님의 프로필 이미지
김성락
질문자

안녕하세요 일코님

그럼 deletepage는 작동하지 않는다는 것이네요..ㅠ

특정 문서의 경우, 계약서 페이지는 출력되지 않게 만들려고 했는데,

한글2014의 경우는 계약서 페이지 전체를 필드로 감싸서 특정한 상황에서 필드를 " "문자열로 대체하게끔 만들었습니다.

혹시 더 좋은 방법은 없을까요? 사용하지 않는 누름틀이 문서에 남아있어 조금 찝찝합니다

혹시 해서 코드도 첨부드립니다. (deletepage 메소드는 작동하지 않군요..)

import os
from pathlib import Path
import tkinter as tk
from tkinter import ttk
from tkinter.filedialog import askopenfilename
import win32com.client as win32
import locale

from PIL.ImImagePlugin import number


def start_hwp():
    hwp=win32.gencache.EnsureDispatch("hwpframe.hwpobject")
    hwp.XHwpWindows.Item(0).Visible=False
    hwp.RegisterModule("FilePathCheckDLL","FilePathCheckerModule")
    return hwp
def start_excel():
    excel=win32.gencache.EnsureDispatch("Excel.Application")
    excel.Visible=False
    return excel
def open_process():
    files = askopenfilename(title="엑셀파일을 선택해주세요",
                                  initialdir=os.getcwd(),
                                  filetypes=(("엑셀파일", "*.xlsx"),))
    files_list[0]=files
    a.delete(0, tk.END)
    a.insert(0,files)

def open_process_hwp():
    files = askopenfilename(title="한글파일을 선택해주세요",
                            initialdir=os.getcwd(),
                            filetypes=(("한글파일", "*.hwp"),))
    files_hwp[0]=files
    b.delete(0, tk.END)
    b.insert(0,files)

def generate_report():
    wb = excel.Workbooks.Open(files_list[0])
    ws = wb.Worksheets(2)
    hwp.Open(files_hwp[0])
    a = 1
    b = 1
    locale.setlocale(locale.LC_ALL, '')

    while True:
        if not ws.Cells(a,b).Value:
            break
        print(str(ws.Cells(a+1,b).Value))
        value = ws.Cells(a+1,b).Value
        if isinstance(value, (int, float)):
            if value < 1:
                value = f"{value:.2%}"
            else:
                value = round(value, 2)
                value = locale.format_string('%.2f', value, grouping=True)
        input_data[f"{ws.Cells(a,b).Value}"] = value
        b += 1

    for idx, field in enumerate(input_data):
        if input_data[f"{field}"] == "계약사항 변경":
            hwp.PutFieldText("등록변경", " ")
        elif input_data[f"{field}"] == "등록변경":
            hwp.PutFieldText("계약변경", " ")
        else:
            hwp.PutFieldText(f"{field}", input_data[f"{field}"])

    hwp.SaveAs(hwp.Path.replace('.hwp'," - 보고서 생성됨.hwp"))
    win.destroy()
    tk.messagebox.showinfo("완료", "보고서 생성이 완료되었습니다.")
    hwp.Clear(1)
    hwp.Quit()
    wb.Save()
    excel.Quit()

if __name__=='__main__':
    hwp=start_hwp()
    excel = start_excel()
    files_list=[""]
    files_hwp=[""]

    input_data={}

    win = tk.Tk()
    win.config(pady=50)
    win.title("보고서 자동생성 프로그램")
    # win.geometry("400x300")

    # 엑셀 파일 선택
    ttk.Label(win, text="데이터가 입력된 엑셀파일을 선택해주세요").grid(row=0, column=0, sticky="w", padx=5)
    ttk.Button(win, text="파일찾기", command=open_process).grid(row=0, column=1, padx=5)
    a = ttk.Entry(win, width=100)
    a.grid(row=1, column=0, columnspan=2, pady=5, padx=5)
    a.insert(0, '파일을 선택해주세요')

    # 한글 파일 선택
    ttk.Label(win, text="양식이 저장된 한글파일을 선택해주세요").grid(row=2, column=0, sticky="w", pady=(10, 0), padx=5)
    ttk.Button(win, text="파일찾기", command=open_process_hwp).grid(row=2, column=1, padx=5, pady=(10, 0))
    b = ttk.Entry(win, width=100)
    b.grid(row=3, column=0, columnspan=2, pady=5, padx=5)
    b.insert(0, '파일을 선택해주세요')

    # 보고서 생성 버튼
    ttk.Button(win, text="보고서 생성", command=generate_report).grid(row=4, column=0, columnspan=2, pady=10)

    # 안내 메시지
    ttk.Label(win, text="한글파일에 뜨는 접근허용을 반드시 눌러주시기 바랍니다.").grid(row=5, column=0, columnspan=2)

    win.mainloop()

    '''win=tk.Tk()
    win.config(pady=50)
    win.title("보고서 자동생성 프로그램")
    #win.geometry("400x300")
    ttk.Label(win, text="데이터가 입력된 엑셀파일을 선택해주세요").grid(row=0, column=0)
    ttk.Button(win, text="파일찾기", command=open_process).grid(row=0, column=1)
    ttk.Label(win, text="").grid(row=0, column=2)
    a = ttk.Entry(win, width=100)
    a.grid(row=1, column=0, columnspan=2)
    a.insert(0,'파일을 선택해주세요')
    ttk.Label(win, text="").grid()
    ttk.Label(win, text="양식이 저장된 한글파일을 선택해주세요").grid(row=3, column=0)
    ttk.Button(win, text="파일찾기", command=open_process_hwp).grid(row=3, column=1)
    b = ttk.Entry(win, width=100)
    b.grid(row=4, column=0, columnspan=2)
    b.insert(0, '파일을 선택해주세요')
    ttk.Label(win, text="").grid()
    ttk.Button(win, text="보고서 생성", command=generate_report).grid()
    ttk.Label(win, text="한글파일에 뜨는 접근허용을 반드시 눌러주시기 바랍니다.").grid()

    win.mainloop()'''

0

안녕하세요, 인프런 AI 인턴입니다. 김성락님.

한글 2014 버전에서 특정 기능을 구현하는데 어려움을 겪고 계시군요. 먼저 pset = hwp.CreateSet()와 같은 명령어로 오류가 발생하는 경우, 이는 주로 아래아한글 버전과 함께 사용하는 API의 호환성 문제일 수 있습니다. 한/글의 버전에 따라 지원하거나 지원하지 않는 메소드나 속성이 있을 수 있기 때문입니다.

다음은 이 문제와 관련된 유사한 질문과 답변입니다:
1. 한글 버전 호환성 문제 해결법 - 이 링크의 게시물에서는 한글 버전에 따른 API 사용의 차이를 설명하고 있으며, 버전 호환성 문제를 해결하는 방법에 대한 여러 실용적인 조언이 포함되어 있습니다.

  1. PyHWP 관련 에러와 해결 방법 - 이 포스트는 파이썬과 한글 간의 통신 에러를 어떻게 해결할 수 있는지에 대한 상세한 정보가 담겨 있으며, 특히 특정 에러 코드에 대한 대응 법을 정리하고 있습니다.

  2. 한글 문서 자동화, 버전별 차이점 - 한글의 여러 버전에서 어떤 자동화 기능이 어떻게 다르게 동작할 수 있는지를 설명하며, 여러 버전에서 일관된 결과를 얻기 위한 팁을 제공하고 있습니다.

현재 환경에서 버전 제약으로 인한 문제를 해결하려면 아래와 같은 접근을 고려해볼 수 있습니다:
- API 문서 확인: 사용 중인 Python과 한글 API 문서를 다시 확인하시고, 해당 버전에서 지원되는 메소드인지 확인하세요.
- 다른 버전의 한글 사용: 가능하다면 최신 버전의 한글을 사용해보세요. 최신 버전은 더 많은 기능 지원을 제공할 가능성이 큽니다.
- 대체 메소드 탐색: CreateSet() 대신 같은 기능을 수행할 수 있는 대체 메소드나 방법이 없는지도 확인해 보세요.

참고자료와 함께 한글의 버전별 자동화 차이를 이해하시면, 문제 해결에 큰 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김성락님의 프로필 이미지
김성락

작성한 질문수

질문하기