none
VS 2005 and Office Excel 2007 Automation RRS feed

  • 질문

  • 안녕하세요

    첫 질문으로 엑셀 오토메이션 관련 하여 간단한 프로그램을 만들다가 막히는 부분이 있어서

    이렇게 글을 올려 봅니다. 

    현재 PC 프로그램으로 Visual Studio 2005 - MFC Application 으로 작성 중이며, 연결 하려는 엑셀 버전은 2007 입니다.

    기타 자료를 확인 해 보니 Add Class MFC Class From TypeLib Microsoft Excel 12.0 Object Library<1.6> 을  

    추가 하여 ( 파일 찾기로 C:\Program Files\Microsoft Office\Office12\EXCEL.EXE 도 추가해 봤습니다.)

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

    (위 포함 Class 를 사용 편의성으로 UserExcel.h 로 정의하여 묶어서 선언도 해봄)

    를 프로젝트에 포함 하였습니다. 그리고 각 헤더에 포함된 #import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" no_namespace 의 에러로 인하여 각 헤더에 선언된 부분을 주석 처리 하고 ProjectDlg.h 에 

    #import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE12\\mso.dll" rename("RGB", "MSRGB")
    #import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" raw_interfaces_only, rename("Reference", "ignorethis"), rename("VBE", "testVBE")
    #import "C:\\Program Files\\Microsoft Office\\OFFICE12\\excel.exe" exclude("IFont", "IPicture") rename("RGB", "ignorethis"), rename("DialogBox", "ignorethis"), rename("VBE", "testVBE"), rename("ReplaceText", "EReplaceText"), rename("CopyFile","ECopyFile"), rename("FindText", "EFindText"), rename("NoPrompt", "ENoPrompt")
     

    변경 처리를 하였습니다. ( 굳이 정의가 필요 없다고도 하여 빼기도함 )

    이때  

    public:
     CApplication m_ExcelCtrl;
     CWorkbook  m_Workbook;
     CWorkbooks  m_Workbooks;
     CWorksheet  m_WorkSheet;
     CWorksheets  m_WorkSheets;

    를 선언 하여 m_ExcelCtrl.CreateDispatch(_T("Excel.Application") ) 로 엑셀이 실행은 되지만 기존에 만들어져 있던 TEST.xls 를 불러와서 그안에 데이터를 읽어 드릴수 없는 문제가 있습니다.

    참고 자료 등에는 m_Workbooks.open 으로 기존 엑셀을 open 한다 라고 되어 있는데 m_Workbooks .open 포함 하고 있지 않아 사용을 할 수 없습니다.

    또한 위에 추가 Class 헤더 포함시 #import 에러 빼고도

    iStationExcel.h(3447) : error C2146: syntax error : missing ';' before identifier

    Application get_Application()
     {
      Application result;
      InvokeHelper(0x94, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
      return result;
     }

    이게 Application get_Application() 여기서 Application 이라는 타입이 없어 나오며, 몇가지 타입 더 걸립니다. ( XlCreator , XlAutoFilterOperator , Pane , Parameter )

    2011년 4월 25일 월요일 오전 7:18