안녕하세요

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

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

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

 

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

 

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

 

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

 

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

 

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

 

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

# -*- 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()

 

안녕하세요.

오늘은 한글파일 내에 표의 내용을 엑셀로 옮기는 작업을 해볼까 합니다.

지원서 같은 것을 한글로 접수받고 엑셀로 정리를 한다고 하였을 때

지원가 많다보면 많이 번거로울 것입니다.

이것을 자동화해보도록 하겠습니다.

우선 지원서가 아래와 같다고 해봅시다!!

 

그리고 이 한글파일을 정리할 엑셀파일은 다음과 같습니다.

 

아래는 표의 내용을 엑셀파일로 자동으로 옮겨주는 코드입니다.

 

아래 코드는 전에 작성했던 코드랑 동일하므로 설명은 생략하겠습니다.

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

import os
import fnmatch

 

엑셀을 사용할 수 있는도록 엑셀개체를 생성합니다.
xl=win32.gencache.EnsureDispatch("Excel.Application")

 

그리고 E드라이브에 있는 엑셀파일을 열어줍니다.

xl.Workbooks.Open("e:정리.xlsx")

 

여기까지 코드를 실행하면 엑셀이 실행이 안된것 처럼 보여집니다.

그러나 보이지만 않을 뿐 백그라운드 상으로는 파일을 열고 있습니다.

만약에 엑셀을 보고 싶다 그러면 아래 코드를 추가로 써줍니다.

xl.Visible=True

 

그리고 한글개체를 생성하고요.
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")

 

E드라이브의 접수 폴더 밑에 있는 모든  한글파일을 열어 줍니다.
dir1=os.getcwd()
dir1="E:₩₩접수₩₩"
filename=fnmatch.filter(os.listdir(dir1),'*.hwp')

print(filename)

 

지원서 파일에는 아래와 같은 항목이 존재합니다.
data=["이름","생년월일", "직장명", "직위", "주소","연락처"]

 

모든 파일을 열면서
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
  j=0

 

각 항목을 검색합니다.
  for item in data:

    option.FindString = data[j]
    option.IgnoreMessage = 1;
    option.Direction = hwp.FindDir("AllDoc");
    hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);

 

각 항목을 찾았으면 해당 항목에서 오른쪽 버튼을 한 번 누름니다.

그러면 찾았던 항목의 옆 칸으로 이동하겠죠?

여기에 우리가 원하는 내용이 있습니다!!

    hwp.HAction.Run("MoveRight");

 

그리고 해당 칸의 마지막까지 선택을 해주고요

    hwp.HAction.Run("MoveSelLineEnd");

 

카피를 해줍니다. Ctrl + C 와 같습니다.
    hwp.HAction.Run("Copy");

 

그리고 엑셀에서 붙여넣기 할 셀을 선택해주고요

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

 

붙여넣기 해줍니다. Ctrl + V 와 같습니다.

    xl.ActiveSheet.Paste()

 

반복해줍니다.
     j=j+1
  i=i+
1

 

한글을 종료해주고요.
hwp.Quit()

 

엑셀은 저장해줍니다.
xl.ActiveWorkbook.SaveAs("e:정리.xlsx")

 

엑셀을 종료하고요
xl.ActiveWorkbook.Close()

코딩은 여기까지입니다.

 

코드를 실행해보면....

엑셀에 한그파일 지원서의 내용이 잘 들어가 있는 것을 확인하실 수 있습니다.

 

지원서 파일이 많으면 확실히 도움이 될거라 생각됩니다.

 

첨부파일 참고하시고요.

 

move.zip
0.02MB

 

감사합니다.

 


import win32com.client as win32
import os
import fnmatch

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

dir1=os.getcwd()
dir1="E:₩₩접수₩₩"
filename=fnmatch.filter(os.listdir(dir1),'*.hwp')
print(filename)
data=["이름","생년월일", "직장명", "직위", "주소","연락처"]
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
    j=0
    for item in data:
        option.FindString = data[j]
        option.IgnoreMessage = 1;
        option.Direction = hwp.FindDir("AllDoc");
        hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
        hwp.HAction.Run("MoveRight");
        hwp.HAction.Run("MoveSelLineEnd");
        hwp.HAction.Run("Copy");
        xl.ActiveSheet.Cells(i+1, j+1).Select()
        xl.ActiveSheet.Paste()
        j=j+1
    print(i)
    i=i+1

hwp.Quit()
xl.ActiveWorkbook.SaveAs("e:정리.xlsx")
xl.ActiveWorkbook.Close()

+ Recent posts