안녕하세요.

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

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

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

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

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

 

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

 

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

 

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

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