안녕하세요
이번 시간에는 한글의 양식개체(체크버튼, 라디오버튼, 콤보박스)의 정보를 엑셀로 옮기는 작업을 해보려 합니다.
먼저 아래와 같은 설문지가 있습니다.
이름을 입력할 수 있는 누름틀(엄밀히 말하면 양식개체는 아님)
성별을 선택할 수 있는 라디오버튼
결혼여부를 선택할 수 있는 체크버튼
거주지를 선택할 수 있는 콤보박스로 구성되어 있습니다.
이런 설문조사 파일들의 정보들을 다음의 엑셀파일에 옮기게 됩니다.
그럼 코드 내용을 보도록 하겠습니다.
많이 보던 아래 코드를 넣어주고요.
# -*- 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()
실행을 하시면 아래와 같이 잘 옮겨진 것을 볼 수 있습니다.
관련 파일도 같이 올려드립니다. 참고하시기 바랍니다.
추가로 궁금하신 사항있으시면 댓글부탁드립니다.
감사합니다.
# -*- 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()
'파이썬 > 한글 자동화' 카테고리의 다른 글
[파이썬] 한글파일 한자를 한글로 자동 변환하기 (2) | 2020.08.04 |
---|---|
[파이썬] 한글파일 하나로 합치기 (3) | 2020.07.24 |
[파이썬] 한글파일 내 그림 추출하기 (0) | 2020.07.22 |
[파이썬] 한글파일을 엑셀로 옮기기 (16) | 2020.07.20 |
[파이썬] 여러 한글파일 내 전화번호 삭제하기 (0) | 2020.07.15 |