inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

288

김성락

작성한 질문수 7

1

안녕하세요 일코님

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

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

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

python 한컴오피스

답변 2

1

일코

성락님 안녕하세요?

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

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

 

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

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

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

 

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

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

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

0

김성락

안녕하세요 일코님

그럼 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 인턴

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

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

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

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

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

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

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

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

섹션7과 같은 수학 수식을 백지에서 시작할 때 어떻게 만들 수 있을까요?

0

76

1

hwp 병렬 작업시 클립보드 충돌문제

0

58

1

본문을 각주로 내리는 법

1

93

1

한글 자동화 삽도 삽입!!

1

384

2

한글 표 내부 위치 찾는 코드좀 알려주세요 ㅠㅠ

1

233

2

빈 문서를 새로 열때는 팝업이 안나오는데 기존 문서를 열면 팝업이 나옵니다

1

118

2

사무실 컴퓨터ㅠ

0

96

2

글자입력 여러번 실행기

0

67

1

현재 커서 문단에 아무런 내용이 없는지 확인하기

1

102

1

특정 스타일을 찾아 이동하는 방법

1

161

2

한/글 파일 open 시 '상위 버전에서...' 메세지 안 뜨게 하는 방법?

1

1108

1

win32com 으로 hwp 문자열 검색하기 문의

1

222

2

[응용] 엑셀문서 값을 필드에 입력하기 질

1

122

1

표 병합하기 관련

0

140

0

메타태그 삽입 자동화

0

191

1

스크립트 매크로 초기화 하고 싶습니다.

1

270

2

한글 창이 여러 개 존재할 때 pyhwpx 모듈로 접근하는 방법을 알고 싶습니다.

1

271

1

표안의 특정 필드에 있는 이미지를 복사하여 한글 외부에 저장하기

1

273

2

스타일 싹 다 지우고 바탕글로 통일하는 방법 문의드립니다.

1

283

0

하위의 여러 폴더 중 특정폴더의 사진만 추출하기

1

345

2

한글 수식을 자동으로 넣는 코드를 만들었는데, 수식 사이의 간격이 계속 벌어집니다.

1

655

1

보유 특허 검색 페이지에서 검색이 되지 않습니다.

1

137

1

hwp 페이지별 분할 저장하는 코드 관련 문의

0

446

0

한글 문서에 사용된 폰트명 추출

1

644

1