본문 바로가기
아래아한글 자동화/python+hwp 중급

한/글 파일로 사내 설문조사를 만들어 취합해보자.[1/2]

by 일코 2020. 8. 4.

아래아한글이 익숙한 대한민국 공무 직원들에게는

구글설문이나 MS폼즈도 좋지만,

자료전송을 거쳐서 엑셀로 취합하고 다시 한글로 변환하고 이런 작업이 번거롭습니다.

시간 잘 가는 걸 좋아하시거나 기존 방법을 좋아하시는 분들은 하던 대로 하시고(취존)

아래아한글로 설문파일을 만들어서 취합을 원하시는 분들은

아래 코드와 한/글파일을 참고해 주시기 바랍니다.

설문조사를 위한 한/글 파일은 아래와 같이 생겼습니다. (예제라서 간단하게..)

아래아한글 폼을 사용한 설문조사 양식

 

그리고 코드는 아래와 같습니다.

import os
from collections import defaultdict

import win32com.client as win32
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")
hwp.XHwpWindows.Item(0).Visible = True
# hwp.RegisterModule("FilePathCheckDLL", "SecurityModule")
hwp.Open(os.path.join(os.getcwd(), "radio.hwp"))


# 답변 기록할 사전 생성
answer_dict = defaultdict(list)


# 라디오버튼값 추가
doc = hwp.XHwpDocuments.Item(0)
for i in range(doc.XHwpFormRadioButtons.Count):
    item = doc.XHwpFormRadioButtons.Item(i)
    if item.Value:
        answer_dict[item.RadioGroupName] = item.Caption


# 체크리스트값 추가
for i in range(doc.XHwpFormCheckButtons.Count):
    item = doc.XHwpFormCheckButtons.Item(i)
    answer_dict[item.GroupName].append(item.Caption)
    # 위 한 줄은 defaultdict(list)라서 key가 없어도 append가 가능함.
    # answer_dict가 일반 dict자료형이면 아래처럼 if문으로 추가해야 함.
    # if item.GroupName not in answer_list.keys() and item.Value:
    #     answer_dict[item.GroupName] = [item.Caption]
    # elif item.GroupName in answer_list.keys() and item.Value:
    #     answer_dict[item.GroupName].append(item.Caption)


# 텍스트 추가
for i in range(doc.XHwpFormEdits.Count):
    item = doc.XHwpFormEdits.Item(i)
    answer_dict[item.GroupName] = item.Text


# 한/글 닫기
hwp.Quit()


# 엑셀 열기
excel = win32.gencache.EnsureDispatch("Excel.Application")
wb = excel.Workbooks.Add()
ws = wb.Worksheets(1)
excel.Visible = True


# 엑셀에 (원하는 순서대로) 값 넣기
ws.Range(ws.Cells(1,1), ws.Cells(1,4)).Value = (
    answer_dict["성별"],
    answer_dict["나이"],
    answer_dict["suggest"],
    ", ".join(answer_dict["interest"]),
)

 아래는 예제코드 실행을 위한 한/글 파일을 첨부하였습니다.

은근히 그룹네임이나 캡션 설정하는 게 번거로운 일이기 때문에 ...

survey.hwp
0.03MB

 

 

위 코드를 실행하려면,

1. 아래아한글과 엑셀이 설치되어 있어야 하며

2. 파이썬과 pywin32 패키지가 설치되어 있어야 합니다. (맘편하게 아나콘다가 설치되어 있으면 제일 좋습니다.)

다음 포스팅에서 상세한 사용법과, 위 코드를 작성하기 위한 API매뉴얼 보는 법 등을 다루겠습니다.

 

감사합니다.

행복한 하루 되세요!!

 

댓글