티스토리 뷰

[DIAdem] 스크립트(Script) 언어에서 Excel 처리하기

스크립트 언어에서 COM 개체를 이용하여 엑셀(Excel)에 대한 처리를 할 수 있습니다. 


Excel Object에 대한 설명을 원하신다면 아래의 링크를 참조하세요.


이 글에서는 스크립트 언어를 통해서 엑셀을 제어하는 방법에 대해서 간략히 알아보도록 하겠습니다. 

스크립트언어를 통해서 Excel을 제어하기 위해서는 CreateObject 라는 함수를 알아야 합니다. Excel에 대한 제어권을 가지고 와야 하기 때문이죠. 그럼 CreateObject 함수를 살펴보겠습니다. 




CreateObject 함수는 COM 개체에 대한 참조를 만들어 반환합니다. 클래스가 명시적으로 COM 구성 요소로 노출되지 않는 경우 Visual Basic에서 CreateObject 함수를 사용하여 해당 클래스의 인스턴스를 만들 수 없습니다.

[출처 : MSDN]


스크립트 언어에서는 간략히 아래와 같이 Excel 어플리케이션을 실행할 수 있습니다. 여기의 코드는 DIAdem의 스크립트 언어인 Visual Basic Script(VBScript)를 기준으로 설명됩니다. 


1) 언어에서 Excel 띄우기


dim objExcel 

Set objExcel = CreateObject("Excel.Application") ' 엑셀 객체 생성

objExcel.Visible = True ' 엑셀 프로그램 보이기, False로 하면 엑셀 창이 보이지 않고, Excel.exe 만 실행이 됩니다.

'objExcel.Quit ' 엑셀을 종료시 사용


'엑셀 뿐만 아니라 워드도 아래처럼 구현을 하면 실행이 가능하겠죠.

dim objWord

Set objWord= CreateObject("Word.Application") ' 워드 객체 생성


엑셀을 실행시켰으니 데이터를 수정해야합니다.

엑셀 프로그램은 Applicatin이라는 인터페이스를 가지고 있다고 설명드렸습니다. 어 Application에 새로운 Workbook을 추가하면 파일이 생성이 됩니다. (추가하지 않고 기존의 파일을 로드할 수도 있습니다.)


2) Excel에 Workbook 추가하기


dim objWorkBook

Set objWorkBook = objExcel.WorkBooks.Add ' Workbook 추가하기


1)과 2)의 코드를 합쳐서 실행을 하게 되면 (Word 부분 제외) 아래와 같은 결과를 얻을 수 있습니다. Book1이라는 Workbook 개체가 생긴것을 확인 할 수 있습니다. 



Workbook 생성이 아닌 기존의 엑셀파일 로딩을 통해서도 Workbook 개체를 만들어 낼 수 있습니다. 


2-1) 기존의 파일 로드하기


dim objWorkBook

Set objWorkBook = objExcel.WorkBooks.Open("C:\TestExcel.xlsx")


로드 결과는 아래와 같습니다.



3) Sheet 가져오기 및 셀 데이터 변경


dim objWorkSheet

Set objWorkSheet = objWorkBook.Worksheets(1) ' Sheet 인덱스로 가져오기

'Set objWorkSheet = objWorkBook.Worksheets("Sheet1") ' Sheet 이름으로도 가져올 수 있습니다.


objWorkSheet.Cells(1,1) = "500"  ' (1,1)에 500이란 값 넣기


위의 코드는 읽어온 (TestExcel.xlsx) 파일의 1번 시트의 1행 1열 셀에 500의 값을 넣은 코드입니다. 

아래 그림의 빨간 네모 박스를 보면 기존의 값이 1에서 500으로 변경된것을 확인 할 수 있습니다. 



4) 저장 및 종료하기


objWorkBook.SaveAs("C:\TestResult.xlsx") ' 다른 이름으로 저장

objExcel.Quit() ' 엑셀 종료


위의 코드는 C:\에 TestResult.xlsx라는 파일을 저장하는 코드입니다. 그리고 나서 Excel 프로그램을 종료합니다. SaveAs와 같은 경우는 파일이 없을때는 문제가 없지만, 해당 경로에 파일이 존재하면 Script가 에러를 발생하게 됩니다. 따라서 이에 대한 예외 처리 부분도 적용을 해야 합니다. 


이때 파일 시스템에 대한 Object를 사용해야 합니다. Excel Object 로드와 마찬가지로 CreateObject를 이용해서 사용할 수 있습니다. 관련 코드는 5) 전체 코드 및 수행을 통해서 확인하시기 바랍니다. 


5) 전체 코드 및 수행


Option Explicit  'Forces the explicit declaration of all the variables in a script.


dim objExcel 

Set objExcel = CreateObject("Excel.Application") ' 엑셀 객체 생성

objExcel.Visible = True ' 엑셀 프로그램 보이기, False로 하면 엑셀 창이 보이지 않고, Excel.exe 만 실행이 됩니다.


dim objWorkBook

Set objWorkBook = objExcel.WorkBooks.Open("C:\TestExcel.xlsx")


dim objWorkSheet

Set objWorkSheet = objWorkBook.Worksheets(1)


objWorkSheet.Cells(1,1) = "500"


' 파일 삭제 코드

Dim fso

Set fso = CreateObject("Scripting.FileSystemObject")

IF (fso.FileExists("C:\TestResult.xlsx")) Then  ' 파일 경로에 파일이 있으면

      fso.DeleteFile("C:\TestResult.xlsx")         ' 삭제한다.

End IF


objWorkBook.SaveAs("C:\TestResult.xlsx")

objExcel.Quit()


지금까지 스크립트 코드에서 Excel을 제어하는 방법을 알아보았습니다. 이 코드는 코드의 구조만 달라질 뿐 C#, VB.NET에서도 똑같이 적용이 되는 부분이니 관련 언어를 사용하시는 분들은 사용법만 간략히 숙지하셔서 해당언어에 맞게 구현하시면 됩니다.


이글이 도움이 되셨나요?

그렇다면 아래의 그림을 클릭해주세요.


댓글