인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

ds1dyg님의 프로필 이미지
ds1dyg

작성한 질문수

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

한/글 파일을 불러올 때마다 뜨는 팝업, 안 뜨게 할 수 없을까요?

한글팝업안뜨게

해결된 질문

작성

·

789

1

한글파일은 잘 열립니다.

단, 접근허용이하는 팝업이 떠서 / 알려주신대로 찬찬히

그런데

레지스터 편집기 HNC폴더에 다른 것은 있는데

‘Hwpautomation’ 폴더만 없는데 어찌해야 할까요?

초보자라 어렵네요. 도와주세요~


 

 

이것저것 다양하게 자동화코드 짜보시다가

막히면 언제든 무엇이든 질문 던져주세요.

업무자동화 코딩은 과학이나 알고리즘과는 조금 달라서

고민만으로 풀리지 않는 경우가 대부분입니다.

저도 최대한 빠르게 회신 드리겠습니다.

답변 5

1

ds1dyg님의 프로필 이미지
ds1dyg
질문자

늘 빠른 답변에ㅡ 감사와 감동입니다.

  1. 보내주신 코딩 매우 감사드립니다.

  2. 엑셀 VB로도 해보려고 아래와 같이 해 보았는데 '450' 에러가 발생하네요. (파일여는 주소가 있는행에서 멈춤)

     

    실례가 아닌지 모르지만 함 봐주시면 감사하겠습니다. 꾸벅

1

ds1dyg님의 프로필 이미지
ds1dyg
질문자

빠른 답변에 감사 드립니다.

위 문제는 해결은 안됬지만 만족합니다.

'누름틀 없는~~ 엑셀로 추합하기' 너무 너무 만족합니다.

이것 배우려 가입했습니다. 꼭 필요한 거라서요

그런데 따라서 코딩을 해도 에러가 발행해서 그러는데

작성하신 코딩을 좀 주시면 다시 해 보겠습니다.

제가 코딩작성에 문제가 있는도 비교 검토해 보려구요.

코딩 작성내용을 text로 주시면 매우 매우 감사드리겠습니다.

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

해당 강의 첨부파일에 소스코드를 대신 넣어두었습니다.

내용은 아래와 거의 같습니다.

import os
from tkinter.filedialog import askopenfilenames

import win32com.client as win32


# 선택한 셀의 텍스트 추출하는 함수
def get_text():
    hwp.InitScan(Range=0xff)
    total_text = ""
    state = 2
    while state not in [0, 1]:
        state, text = hwp.GetText()
        total_text += text
    hwp.ReleaseScan()
    return total_text


# 파일목록 선택하기
filelist = askopenfilenames(title="취합할 아래아한글 파일을 선택해주세요.",
                            initialdir=os.getcwd(),
                            filetypes=[("아래아한글파일", "*.hwp *.hwpx")])

# 아래아한글 실행
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Item(0).Visible = True
hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")

# 엑셀 실행
excel = win32.gencache.EnsureDispatch("Excel.Application")
wb = excel.Workbooks.Open(os.path.join(os.getcwd(), "취합.xlsx"))
ws = wb.Worksheets(1)
excel.Visible = True

# 선택한 아래아한글을 하나씩 순회하면서
for file in filelist:
    hwp.Open(file)  # 한/글 문서를 열고

    # 첫 번째 표를 탐색
    ctrl = hwp.HeadCtrl
    while ctrl:
        if ctrl.CtrlID == "tbl":
            hwp.SetPosBySet(ctrl.GetAnchorPos(0))
            break
        else:
            ctrl = ctrl.Next

    # 찾아낸 첫 번째 표 안에 진입(A1셀 선택상태)
    hwp.FindCtrl()
    hwp.Run("ShapeObjTableSelCell")

    # 전체 셀의 각각의 값을 파이썬 리스트로 추출
    contents = []
    contents.append(get_text())  # 첫 번째 셀 값 넣어주고 나서
    while hwp.HAction.Run("TableRightCell"):
        contents.append(get_text())  # 우측으로 이동하면서 모든 셀 값 추출

    # contents 리스트 중 엑셀로 옮길 값만 추출
    과제명 = contents[1]
    신청부서 = contents[3].split("\r\n")[0].replace("/", "")
    과제담당관 = contents[3].split("\r\n")[1].replace("/", "")
    담당공무원 = contents[5]

    연구방식_ = ["위탁형", "공동연구형", "자문형"]
    연구방식 = [i.strip() for i in contents[7].split("(")][1:]
    for idx, text in enumerate(연구방식):
        if not text.startswith(")"):
            연구방식 = 연구방식_[idx]
            break

    연구시작 = contents[9].split("~")[0].strip()
    연구종료 = contents[9].split("~")[1].split("(")[0].strip()
    연구기간 = contents[9].split("(")[1].replace(")", "")

    예산항목_ = ["포괄", "사업별"]
    예산항목 = [i.strip() for i in contents[12].split("(")[1:]]
    for idx, text in enumerate(예산항목):
        if text.startswith(")"):
            pass
        else:
            예산항목 = 예산항목_[idx]

    예상금액 = contents[15]
    연구필요성 = contents[17]
    중복검토방법 = contents[21].split("\r\n")[1].replace("-", "").strip()

    중복성여부_ = ["있다", "없다"]
    중복성여부 = [i.strip() for i in contents[21].split("\r\n")[2].split("(")][1:]
    for idx, text in enumerate(중복성여부):
        if not text.startswith(")"):
            중복성여부 = 중복성여부_[idx]

    연구내용 = contents[23]
    연구결과활용방안 = contents[25]

    # 추출한 값들을 엑셀파일에 입력
    입력행 = len(ws.UsedRange()) + 1  # 추가할 행번호 계산
    ws.Range(ws.Cells(입력행, 1), ws.Cells(입력행, 15)).Value = (
        과제명, 신청부서, 과제담당관, 담당공무원, 연구방식, 연구시작, 연구종료, 연구기간, 예산항목, 예상금액,
        연구필요성, 중복검토방법, 중복성여부, 연구내용, 연구결과활용방안
    )

# 모든 한/글 문서의 순회를 마쳤으면
wb.Save()  # 엑셀파일 저장
hwp.Clear()  # 한/글 프로그램 비우기
hwp.Quit()  # 한/글 프로그램 종료

 

다만, 칸이 비어 있다든지, 원래 서식대로 작성되어 있다든지 할 때
오류가 발생할 수 있습니다. 예를 들면 신청부서/과제담당관이 한 줄로 기재되어 있다면
IndexError가 발생합니다.

 

여러가지 예외처리를 넣어줘야 하지만,
강의 특성상 깊게 예외처리를 해놓지는 않았습니다ㅜ

 

만약 작업하시면서 어려움이 있거나
오류가 해결이 안 된다면
martinii.fun@gmail.com으로 편하게 문의 주세요.

빠르게 도움 드리겠습니다.

 

감사합니다.
행복한 하루 되세요^^

ds1dyg님의 프로필 이미지
ds1dyg
질문자

보내주신 코딩 매우 감사드립니다. 꾸벅

늘 빠르게 대응해 주시니 너무 고맙습니다.

해결되었습니다.~~~이제 또 열공해야죠~~

1

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

안녕하세요?

해당 버전에는 HwpAutomation 이라는 경로가 있어야 하는데요ㅜ

 

아래 방법으로 한 번 시도해보시기 바랍니다.

  1. 레지스트리에디터를 열어서

image

  1. 컴퓨터\HKEY_CURRENT_USER\Software\HNC 안에 HwpAutomation\Modules 경로를 생성한다.


    (우클릭, 새로만들기 - 키)

image

  1. Modules 안에 dll파일의 경로를 등록한다.

     

    image

  2. 아래아한글이 설치된 폴더(bin)에서 hwp.exe -regserver를 실행한다.
    아래아한글이 실행되면 끝. 닫고 파이썬으로 RegisterModule 코드를 다시 실행해본다.

image

혹시 이렇게 해도 보안 팝업이 계속 뜬다면ㅜ
한컴 기본 설정을 통한 설정 초기화 또는
재설치를 통해 오토메이션 등록을 해야할것 같습니다.

 

실제 한컴 개발자 포럼에도 자주 올라오는 질문입니다ㅜ
해보시고 다시 한 번만 댓글 남겨주시기 바랍니다.

 

행복한 하루 되세요!!!!!!ㅎ

1

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

혹시 한/글 버전이 어떻게 되는지요?

버전에 따라 UserModule이라든지, 레지스트리 이름이 약간씩 다릅니다.

ds1dyg님의 프로필 이미지
ds1dyg
질문자

빠른 답변 감사드립니다.

  1. 버전 정보는 아래와 같습니다.

image

  1. 한가지 질의(요청) 더 있습니다. - 이번강의 내용은 제가 그대로 사용하면 딱 맞춤형이라 코딩을 문서로 받고 싶습니다. 따라서 하는데 자꾸만 에러가 ㅠㅠ 가능한지요?

     

  2. 코딩 전체 실행이 아닌 중간부분만 실행하는 방법도 알려주세요. (VBA사용하다가 파이선으로 와서 어려움이 , 너무 기본적인 것을 문의하여 죄송합니다.

  3. 그리고 감사합니다.

     

 

 

 

 

 

 

 

 

 

 

q

1

안녕하세요, 인프런 AI 인턴입니다.

ds1dyg님의 질문을 잘 읽었습니다. 한글 자동화 과정에서 접근 허용 팝업이 나타나는 문제와 관련하여 HwpAutomation 폴더를 레지스터 편집기에서 찾지 못하는 상황에 대해 도움이 필요하신 것으로 이해했습니다.

이전에 비슷한 문제에 대해 다룬 내용이 있어 유사한 상황에서 제공된 답변을 아래에 링크로 제공해 드리겠습니다. 이 답변들은 한글(Hangul) 자동화와 관련된 에러 해결에 도움을 줄 수 있을 것입니다.

  • hwp = win32……부터 에러가 발생합니다 ㅠㅠ
    • 이 글에서는 한글 자동화 과정에서 발생할 수 있는 오류와 이를 해결하는 방법에 대해 설명하고 있습니다. 특히 한글의 오토메이션 등록에 대한 문제가 있을 때 해결 방법을 제공하고 있으므로 유사한 상황인 것으로 보여집니다.

위 사례와 정확히 일치하지 않을 수도 있으므로, 보다 구체적인 해결 방법을 원하시면 다음 단계로 지식공유자에게 질문을 남기시면 좋을 것 같습니다.

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

ds1dyg님의 프로필 이미지
ds1dyg

작성한 질문수

질문하기