HOWTO: MFC를 사용하여 Excel 자동화 및 새 통합 문서 만들기/서식 지정하기

기술 자료 번역 기술 자료 번역
기술 자료: 179706 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 Microsoft Visual C++ 버전 5.0 및 6.0과 함께 설치되는 MFC(Microsoft Foundation Class) 라이브러리 버전 4.2를 사용하여 Microsoft Excel을 자동화하는 방법을 보여 줍니다.

이 문서에서는 OLE 자동화를 사용하여 Microsoft Excel 통합 문서를 만들고 서식을 지정하는 기술을 설명합니다. 여기에는 워크시트에 데이터를 추가하고 서식을 지정하는 Microsoft Excel 형식 라이브러리의 몇 가지 메서드/속성에 대한 설명이 포함됩니다.

Microsoft Excel 2000 및 2002 자동화에 대한 참고 사항

이 문서에 나와 있는 예제 코드는 Excel 97 개체 라이브러리(Excel 8.olb)에서 생성된 클래스 래퍼를 사용합니다. 이 코드를 약간 수정하면 Excel 2000(Excel9.olb) 또는 Excel 2002(Excel.olb)용 클래스 래퍼를 사용하는 자동화 클라이언트에도 적용할 수 있습니다. Microsoft Excel 2000 또는 2002 형식 라이브러리에서 이 문서에 설명되어 있는 예제 코드를 사용하는 것에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
224925 INFO: Office의 형식 라이브러리가 새 릴리스에서 변경될 수 있다

추가 정보

이 문서에 나와 있는 코드를 MFC .cpp 파일에 정의되어 있는 이벤트의 메시지 처리기 함수에 복사할 수 있습니다. 그러나, 이 코드는 Excel8.olb 형식 라이브러리에 정의되어 있는 IDispatch 인터페이스와 구성원 함수를 사용하는 프로세스를 설명하기 위한 것입니다. 예제 코드를 읽고 이해하면 이 예제를 수정하거나 사용자 자신의 코드를 작성하여 MFC를 사용해서 Microsoft Excel 97을 자동화할 수 있게 됩니다.

프로젝트를 만드는 단계

  1. 다음 Microsoft 기술 자료 문서에 나와 있는 1 - 12단계를 수행하여 Excel8.olb 형식 라이브러리에 정의되어 있는 IDispatch 인터페이스와 구성원 함수를 사용하는 예제 프로젝트를 만듭니다.
    178749 HOWTO: MFC 및 형식 라이브러리를 사용하여 자동화 프로젝트 만들기
  2. AutoProjectDlg.cpp 파일의 맨 위에 다음 행을 추가합니다.
          #include "excel8.h"
    					
  3. AutoProjectDLG.cpp 파일의 CAutoProjectDlg::OnRun()에 다음 코드를 추가합니다.

    예제 코드

          // Commonly used OLE variants.
          COleVariant
                     covTrue((short)TRUE),
                     covFalse((short)FALSE),
                     covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    
    
          _Application app;
          Workbooks books;
          _Workbook book;
    
          Worksheets sheets;
          _Worksheet sheet;
          Range range;
          Font font;
          Range cols;
    
          // Start Excel and get Application object.
    
          if(!app.CreateDispatch("Excel.Application"))
          {
           AfxMessageBox("Couldn't start Excel and get Application object.");
           return;
          }
    
    
          //Get a new workbook.
          books = app.GetWorkbooks();
          book = books.Add (covOptional);
    
          //Get the first sheet.
          sheets =book.GetSheets();
          sheet = sheets.GetItem(COleVariant((short)1));
    
          //Fill cells A1, B1, C1, and D1 one cell at a time with "headers".
          range = sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
          range.SetValue(COleVariant("First Name"));
          range = sheet.GetRange(COleVariant("B1"),COleVariant("B1"));
          range.SetValue(COleVariant("Last Name"));
          range = sheet.GetRange(COleVariant("C1"),COleVariant("C1"));
          range.SetValue(COleVariant("Full Name"));
          range = sheet.GetRange(COleVariant("D1"),COleVariant("D1"));
          range.SetValue(COleVariant("Salary"));
    
    
          //Format A1:D1 as bold, vertical alignment = center.
          range = sheet.GetRange(COleVariant("A1"), COleVariant("D1"));
          font = range.GetFont();
          font.SetBold(covTrue);
          range.SetVerticalAlignment(
                   COleVariant((short)-4108));   //xlVAlignCenter = -4108
    
          //Fill A2:B6 with an array of values (First & Last Names).
          {
             COleSafeArray saRet;
             DWORD numElements[]={5,2};   //5x2 element array
             saRet.Create(VT_BSTR, 2, numElements);
    
    
             //Fill the 5x2 SafeArray with the following data:
             //   John      Smith
             //   Tom       Brown
             //   Sue       Thomas
             //   Jane      Jones
             //   Adam      Johnson
    
             FillSafeArray(L"John", 0, 0, &saRet);
             FillSafeArray(L"Smith", 0, 1, &saRet);
             FillSafeArray(L"Tom", 1, 0, &saRet);
             FillSafeArray(L"Brown", 1, 1, &saRet);
             FillSafeArray(L"Sue", 2, 0, &saRet);
             FillSafeArray(L"Thomas", 2, 1, &saRet);
    
             FillSafeArray(L"Jane", 3, 0, &saRet);
             FillSafeArray(L"Jones", 3, 1, &saRet);
             FillSafeArray(L"Adam", 4, 0, &saRet);
             FillSafeArray(L"Johnson", 4, 1, &saRet);
    
             range = sheet.GetRange(COleVariant("A2"), COleVariant("B6"));
             range.SetValue(COleVariant(saRet));
    
             saRet.Detach();
          }
    
          //Fill C2:C6 with a relative formula (=A2 & " " & B2).
          range = sheet.GetRange(COleVariant("C2"), COleVariant("C6"));
          range.SetFormula(COleVariant("=A2 & \" \" & B2"));
    
          //Fill D2:D6 with a formula(=RAND()*100000) and apply a number
          //format.
          range = sheet.GetRange(COleVariant("D2"), COleVariant("D6"));
          range.SetFormula(COleVariant("=RAND()*100000"));
          range.SetNumberFormat(COleVariant("$0.00"));
    
          //AutoFit columns A:D.
          range = sheet.GetRange(COleVariant("A1"), COleVariant("D1"));
          cols = range.GetEntireColumn();
          cols.AutoFit();
    
          //Manipulate a variable number of columns for Quarterly Sales Data.
          {
             short NumQtrs;
             CString msg;
             Range resizedrange;
             Interior interior;
             Borders borders;
    
             //Determine how many quarters to display data for.
             for(NumQtrs=1;NumQtrs<=3;NumQtrs++)
             {
                msg.Format("Enter sales data for %d quarter(s)?", NumQtrs);
                if(AfxMessageBox(msg,MB_YESNO)==IDYES)
                {
                   break;
                }
             }
             msg.Format("Displaying data for %d quarters.", NumQtrs);
             AfxMessageBox(msg);
    
             //Starting at E1, fill headers for the number of columns selected.
             range = sheet.GetRange(COleVariant("E1"), COleVariant("E1"));
             resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
             resizedrange.SetFormula(
                    COleVariant("=\"Q\" & COLUMN()-4 & CHAR(10) & \"Sales\""));
             //Change the Orientation and WrapText properties for the headers.
             resizedrange.SetOrientation(COleVariant((short)38));
             resizedrange.SetWrapText(covTrue);
             //Fill the interior color of the headers.
             interior = resizedrange.GetInterior();
             interior.SetColorIndex(COleVariant((short)36));
    
             //Fill the columns with a formula and apply a number format.
             range = sheet.GetRange(COleVariant("E2"), COleVariant("E6"));
             resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
             resizedrange.SetFormula(COleVariant("=RAND()*100"));
             resizedrange.SetNumberFormat(COleVariant("$0.00"));
    
             //Apply borders to the Sales data and headers.
             range = sheet.GetRange(COleVariant("E1"), COleVariant("E6"));
             resizedrange= range.GetResize(covOptional, COleVariant(NumQtrs));
             borders = resizedrange.GetBorders();
             borders.SetWeight(COleVariant((short)2));   //xlThin = 2
    
             //Add a Totals formula for the Quarterly sales data and apply a
             //border.
             range = sheet.GetRange(COleVariant("E8"), COleVariant("E8"));
             resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
             resizedrange.SetFormula(COleVariant("=SUM(E2:E6)"));
             borders = resizedrange.GetBorders();
             {
                Border bottomborder;
                bottomborder = borders.GetItem((long)9);
                bottomborder.SetLineStyle(
                               COleVariant((short)-4119));   //xlDouble = -4119
                bottomborder.SetWeight(
                               COleVariant((short)4));       //xlThick = 4
    
             }
          }
    
          //Make the application visible and give the user control of
          //Microsoft Excel.
          app.SetVisible(TRUE);
          app.SetUserControl(TRUE);
    					
  4. AutoProjectDLG.cpp의 CAutoProjectDlg::OnRun() 앞에 다음 함수를 추가합니다.

    예제 코드

          void FillSafeArray(OLECHAR FAR* sz, int iRow, int iCol,
                             COleSafeArray* sa)
          {
    
             VARIANT v;
             long index[2];
    
             index[0] = iRow;
             index[1] = iCol;
    
             VariantInit(&v);
             v.vt = VT_BSTR;
             v.bstrVal = SysAllocString(sz);
             sa->PutElement(index, v.bstrVal);
             SysFreeString(v.bstrVal);
             VariantClear(&v);
    
          }
    					
  5. Developer Studio에서 응용 프로그램을 실행합니다. 예제가 대화 상자 기반 응용 프로그램을 만들어 대화 상자가 나타나면 Run 단추를 누릅니다.




Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 179706 - 마지막 검토: 2011년 9월 18일 일요일 - 수정: 3.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Foundation Class Library 4.2
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
키워드:?
kbautomation kbhowto kbinterop KB179706

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com