안녕하세요

이번 시간에는 한글의 양식개체(체크버튼, 라디오버튼, 콤보박스)의 정보를 엑셀로 옮기는 작업을 해보려 합니다.

먼저 아래와 같은 설문지가 있습니다.

이름을 입력할 수 있는 누름틀(엄밀히 말하면 양식개체는 아님)

 

성별을 선택할 수 있는 라디오버튼

 

결혼여부를 선택할 수 있는 체크버튼

 

거주지를 선택할 수 있는 콤보박스로 구성되어 있습니다.

 

이런 설문조사 파일들의 정보들을 다음의 엑셀파일에 옮기게 됩니다.

 

그럼 코드 내용을 보도록 하겠습니다.

 

많이 보던 아래 코드를 넣어주고요.

# -*- coding: cp949 -*-
import win32com.client as win32

import os
import fnmatch
import time

 

엑셀과 한글 개체를 불러옵니다.
xl=win32.gencache.EnsureDispatch("Excel.Application")
xl.Workbooks.Open("e:/move2/정리.xlsx")
xl.Visible=True
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")

 

폴더내에 들어있는 모든 한글파일을 검색하고요
dir1=os.getcwd()
dir1="E:/move2/접수/"
filename=fnmatch.filter(os.listdir(dir1),'*.hwp')

print(filename)

 

모든 파일을 열면서
i=1
for file in filename:

  hwp.Open(dir1+file, "HWP", "forceopen:true")

 

"이름"이란 글자를 찾구요
  hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
  option = hwp.HParameterSet.HFindReplace
  option.FindString = "이름"
  option.IgnoreMessage = 1;

  option.Direction = hwp.FindDir("AllDoc");
  hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);

 

옆 칸으로 이동합니다.
  hwp.HAction.Run("MoveRight");

 

한번 더 이동하면 누름틀 안으로 진입하게 됩니다.
  hwp.HAction.Run("MoveRight");

 

마지막 글자까지 선택하고요.
  hwp.HAction.Run("MoveSelLineEnd");

 

카피를 해주고요
  hwp.HAction.Run("Copy");

 

엑셀에 붙여놓을 셀을 선택하고

  xl.ActiveSheet.Cells(i + 1, 1).Select()

 

붙여줍니다.
  xl.ActiveSheet.Paste()

 

그리고 양식개체에 접근하는 법입니다.

gender = hwp.XHwpDocuments.Item(0).XHwpFormRadioButtons.ItemFromName("RadioButton1").Value

여기에서  Item(0) 이 의미하는 것은 첫번째 탭을 의미합니다.

엑셀에서 말하는 시트의 첫번째라고 생각하시면 됩니다.

그리고 해당 탭에 있는 라디오 버튼의 속성 중 이름이  "RadioButton1"이라고 되어 있는 개체의 값을 가져옵니다.

체크박스와 콤보박스의 정보를 가져옵니다.

marriage = hwp.XHwpDocuments.Item(0).XHwpFormCheckButtons.ItemFromName("CheckBox1").Value
address = hwp.XHwpDocuments.Item(0).XHwpFormComboBoxs.ItemFromName("ComboBox1").Text

추가로 콤보박스의 코드는 아래 그림과 같으니 참고하시기 바랍니다.

남자에 체크했으면 남자이고, 체크하지 않았으면 여자입니다.
if gender == 1:
  xl.ActiveSheet.Cells(i + 1, 2).Value = "남자"
else:

  xl.ActiveSheet.Cells(i + 1, 2).Value = "여자"

 

결혼여부에 체크했으면 기혼이고 아니면 미혼입니다.
if marriage == 1:
  xl.ActiveSheet.Cells(i + 1, 3).Value = "기혼"
else:

  xl.ActiveSheet.Cells(i + 1, 3).Value = "미혼"

 

주소를 넣어주고요
  xl.ActiveSheet.Cells(i + 1, 4).Value = address
i=i+1

 

한글과 엑셀을 종료합니다.

hwp.Quit()
xl.ActiveWorkbook.Save()
xl.ActiveWorkbook.Close()

실행을 하시면 아래와 같이 잘 옮겨진 것을 볼 수 있습니다.

 

관련 파일도 같이 올려드립니다. 참고하시기 바랍니다.

 

move2.zip
0.03MB

 

추가로 궁금하신 사항있으시면 댓글부탁드립니다.

 

감사합니다.

 

 


 

# -*- coding: cp949 -*-
import win32com.client as win32
import os
import fnmatch
import time

xl=win32.gencache.EnsureDispatch("Excel.Application")
xl.Workbooks.Open("e:/move2/정리.xlsx")
xl.Visible=True
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")

dir1=os.getcwd()
dir1="E:/move2/접수/"
filename=fnmatch.filter(os.listdir(dir1),'*.hwp')
print(filename)
i=1
for file in filename:
    hwp.Open(dir1+file, "HWP", "forceopen:true")
    hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
    option = hwp.HParameterSet.HFindReplace
    option.FindString = "이름"
    option.IgnoreMessage = 1;
    option.Direction = hwp.FindDir("AllDoc");
    hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
    hwp.HAction.Run("MoveRight");
    hwp.HAction.Run("MoveRight");
    hwp.HAction.Run("MoveSelLineEnd");
    hwp.HAction.Run("Copy");
    xl.ActiveSheet.Cells(i + 1, 1).Select()
    xl.ActiveSheet.Paste()
    gender = hwp.XHwpDocuments.Item(0).XHwpFormRadioButtons.ItemFromName("RadioButton1").Value
    marriage = hwp.XHwpDocuments.Item(0).XHwpFormCheckButtons.ItemFromName("CheckBox1").Value
    address = hwp.XHwpDocuments.Item(0).XHwpFormComboBoxs.ItemFromName("ComboBox1").Text
    if gender == 1:
        xl.ActiveSheet.Cells(i + 1, 2).Value = "남자"
    else:
        xl.ActiveSheet.Cells(i + 1, 2).Value = "여자"
    if marriage == 1:
        xl.ActiveSheet.Cells(i + 1, 3).Value = "기혼"
    else:
        xl.ActiveSheet.Cells(i + 1, 3).Value = "미혼"
    xl.ActiveSheet.Cells(i + 1, 4).Value = address
    i=i+1
hwp.Quit()
xl.ActiveWorkbook.Save()
xl.ActiveWorkbook.Close()

 

+ Recent posts