'vs2008'에 해당되는 글 1건

  1. 2010.07.14 VS2008 Excel Automation
2010. 7. 14. 01:33

VS2008 Excel Automation

정보도 부족하고 MSDN에서 검색할 키워드도 잘 몰라서 하루종일 헤메다가 방법을 알아내서 팁으로 올립니다.

 

 

1. VS2008 프로젝트 생성

 

프로젝트 타입은 MFC Application 으로 하시고 프로젝트 옵션에서 Automation을 체크하세요.

프로젝트 이름은 Test라고 가정하겠습니다.

 

 

2. Type Library 추가

 

툴바에서 프로젝트 -> Add Class를 선택합니다.

MFC Class From TypeLib를 선택하고 Add 버튼을 누릅니다.

Registry나 File 두가지로 추가할수 있는데

  MS Office 2007이 깔려 있는 상태라면 Microsoft Excel 12.0 Object Library<1.6>을 선택하시면 됩니다.

  File을 통해서 하시려면 C:\Program Files\Microsoft Offce\Office 12\EXCEL.exe를 선택하시면 됩니다.

그러면 Interfaces에 클래스별 인터페이스가 쭈욱 나열되는데, 전체를 추가하시던가 필요한 인터페이스를 추가합니다.

  _Application, _Workbook, _Worksheet, Workbooks, Worksheets, Range정도는 추가해주시는게 좋습니다.

 

 

여기까지는 잘하신분 많을겁니다. 이상하게 에러가 나는 부분 해결을 말씀 드리겠습니다.

 

 

3. CTestDlg.cpp에 다음 파일들을 include 해줍니다.

 

#include "CApplication.h"
#include "CWorkbooks.h"
#include "CWorkbook.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
#include "CRange.h"

 

 

4. include 한 파일들을 엽니다.

 

// Machine generated IDispatch wrapper class(es) created with Add Class from Typelib Wizard

 

#import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" no_namespace
// CApplication wrapper class

위에 #import부분을 주석처리 합니다.

이미 VS2008에서 임포트를 해놓았기 때문에 redefinition이라면서 에러가 230개씩 납니다.

 

 

5. 테스트 버튼 작성

 

다이얼로그 에디터에서 버튼을 하나 끌어다 놓습니다.

버튼에서 오른쪽 클릭을하고 Add Event Handler를 선택합니다.

BN_CLICKED 이벤트에 함수를 추가합니다.

 

 

6. 테스트 코드 추가

 

 CApplication app;  // app is the Excel _Application object

 

 // Start Excel and get Application object.

 if(!app.CreateDispatch(_T("Excel.Application")))
 {
  AfxMessageBox(_T("Cannot start Excel and get Application object."));
  return;
 }
 else
 {
  //Make the application visible and give the user control of
  //Microsoft Excel.
  app.put_Visible(TRUE);
  app.put_UserControl(TRUE);
  AfxMessageBox(_T("Close Excel."));
 }

 

VS2008에서는 기존에 쓰던 함수에 입력 타입이 거의 LPCTSTR로 바뀌었더군요.

_T()매크로를 이용하시면 되겠습니다.

(개인적으로 불편한데 편한방법 아시는분 답변좀^^)

 

 

7. 실행

 

컴파일하시고 실행하시면 엑셀이 실행될겁니다.

CRange.h에 DisplayBox인지 하는 함수에서 컴파일 에러가 나길래 저는 함수를 주석처리해버렸습니다.;;

 

 

8. 기타 변경된점

 

기존에 Get으로 시작되는 함수는 get_로 바뀌었다고 생각하시면 됩니다. ex) GetWorksheets() ->get_Worksheets()

기존에 Set으로 시작되는 함수는 put_로 바뀌었다고 생각하시면 됩니다. ex) SetValue() -> put_Value();

 

 

9. 검색 키워드

 

영문 자료를 찾을때 Visual Studio 2008, Excel 2007로 아무리 찾아도 찾기가 힘들더군요.

위에 기본을 아시면 비슷한 소스 가져다 응용하실수 있을겁니다.

.NET, Excel 2002, Excel 2003 등으로 검색하시면 도움이 될만한 소스가 많이 있을겁니다.



출처: http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8151&page=1