티스토리 뷰

728x90

MFC에서 Excel 파일 불러오기

1. 준비 단계

  • Visual Studio에서 Excel COM 라이브러리를 참조로 추가.
  • 프로젝트 속성에서 Excel OLB 파일 경로를 지정.
  • #include "afxdisp.h"를 프로젝트에 포함.

2. 주요 구현 단계

  1. COM 라이브러리 초기화: AfxOleInit()CoInitialize() 사용.
  2. Excel Application 객체 생성: CoCreateInstance 호출.
  3. Excel 파일 열기: Workbooks.Open 메서드를 호출하여 파일 열기.
  4. 셀 데이터 읽기: 특정 워크시트와 셀 선택 후 값 가져오기.
  5. COM 해제: CoUninitialize() 호출로 리소스 해제.

3. 예제 코드

#include "afxdisp.h"

void ReadExcelFile() {
    if (!AfxOleInit()) { AfxMessageBox(_T("COM 초기화 실패")); return; }
    CoInitialize(NULL);

    try {
        // Excel Application 생성
        CComPtr<IDispatch> pExcelApp;
        CLSID clsid;
        CLSIDFromProgID(L"Excel.Application", &clsid);
        CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&pExcelApp);

        // Workbook 열기
        CComPtr<IDispatch> pWorkbooks, pWorkbook;
        VARIANT filePath = { VT_BSTR, L"C:\\Users\\User\\Documents\\example.xlsx" };
        pExcelApp->Invoke(L"Workbooks", IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, NULL, &pWorkbooks);
        pWorkbooks->Invoke(L"Open", IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &filePath, &pWorkbook);

        // 셀 값 읽기
        CComPtr<IDispatch> pSheet, pCell;
        CComVariant sheetIndex(1), cellRow(1), cellColumn(1);
        pWorkbook->Invoke(L"Sheets", IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &sheetIndex, &pSheet);
        pSheet->Invoke(L"Cells", IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &cellRow, &cellColumn, &pCell);
        CComVariant cellValue;
        pCell->Invoke(L"Value", IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, NULL, &cellValue);

        // 결과 출력
        CString result;
        result.Format(_T("A1 셀 값: %s"), cellValue.bstrVal);
        AfxMessageBox(result);
    } catch (...) { AfxMessageBox(_T("오류 발생")); }
    CoUninitialize();
}
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함
250x250