MFC 배열 범위 채우기 및 Excel을 자동화하는 방법

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

이 페이지에서

요약

이 문서에서는 Microsoft Excel을 자동화하는 값의 배열을 사용하여 여러 셀 범위를 채우는 방법을 보여 줍니다.

추가 정보

--하나씩 셀을 채우지 않고 여러 셀 범위를 채우려면 2차원 variant Range 개체에 대해 SetValue 매크로 함수를 호출하여 Excel로 전달하는 SAFEARRAY 만들어야 합니다. 다음 단계에서는 이 프로세스를 보여 줍니다.

Microsoft Excel 2000 및 2002 자동화 노트

이 문서의 예제 코드는 Excel 97 개체 라이브러리 (Excel 8.olb) 에서 생성된 클래스 래퍼를 사용합니다. 약간의 수정이 이 코드 (Excel9.olb) Excel 2000 또는 Excel 2002 (Excel.olb) 클래스 래퍼를 사용하는 자동화 클라이언트를 적용할 수 있습니다. Microsoft Excel 2000 또는 2002 형식 라이브러리를 사용하여 이 문서에서 설명하는 예제 코드를 사용하는 방법에 대한 자세한 내용은 Microsoft 기술 자료 문서를 보려면 다음 문서 번호를 누르십시오.
224925정보: 형식 라이브러리 Office 프로그램 새 릴리스 변경될 수 있다

프로젝트를 만드는 단계

  1. 1-12단계 사용하는 경우 IDispatch 인터페이스 및 멤버 함수를 Excel8.olb 형식 라이브러리에 정의된 예제 프로젝트를 만들려면 Microsoft 기술 자료의 다음 문서에서 다음과 같이 하십시오.
    178749MFC 및 형식 라이브러리를 사용하여 자동화 프로젝트를 만드는 방법
  2. 4단계와 5단계를 178749 부모 아티클 중 만든 대화 상자 지정한 대로 속성 사용하여 다음 컨트롤을 추가하십시오. 또한 해당 멤버 변수 추가:
                                      Member                Member
          Control   Name              Variable Type         Variable Name
          -----------------------------------------------------------------
          Edit      IDC_STARTINGCELL  m_sStartingCell       CString
          Edit      IDC_NUMROWS       m_iNumRows            short
          Edit      IDC_NUMCOLS       m_iNumCols            short
          CheckBox  IDC_STRING        m_bFillWithStrings    BOOL
    					
  3. AutoProjectDlg.cpp 파일 맨 위에 다음 줄을 추가합니다:
          #include "excel8.h"
    					
  4. CAutoProjectDlg::OnRun() AutoProjectDlg.cpp 파일에 다음 코드를 추가하십시오.

    예제 코드

          // OLE Variant for Optional.
          COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    
          _Application objApp;
    
          _Workbook objBook;
          Workbooks objBooks;
          Worksheets objSheets;
          _Worksheet objSheet;
          Range range;
    
          if(!UpdateData(TRUE))
          {
             return;
          }
    
          // Instantiate Excel and start a new workbook.
          objApp.CreateDispatch("Excel.Application");
          objBooks = objApp.GetWorkbooks();
          objBook = objBooks.Add(VOptional);
          objSheets = objBook.GetWorksheets();
          objSheet = objSheets.GetItem(COleVariant((short)1));
    
          //Get the range where the starting cell has the address
          //m_sStartingCell and it's dimensions are m_iNumRows x m_iNumCols.
          range = objSheet.GetRange(COleVariant(m_sStartingCell),
                                    COleVariant(m_sStartingCell));
          range = range.GetResize(COleVariant(m_iNumRows),
                                  COleVariant(m_iNumCols));
    
          //*** Fill the range with an array of values.
    
          //Create the SAFEARRAY.
          COleSafeArray saRet;
          DWORD numElements[2];
          numElements[0]= m_iNumRows;   //Number of rows in the range.
          numElements[1]= m_iNumCols;   //Number of columns in the range.
    
          if(m_bFillWithStrings)
          {
             saRet.Create(VT_BSTR, 2, numElements);
          }
          else
          {
             saRet.Create(VT_R8, 2, numElements);
          }
    
          //Fill the SAFEARRAY.
          long index[2];
          long iRow;
          long iCol;
    
          for(iRow=0;iRow<=m_iNumRows-1;iRow++)
          {
             for(iCol=0;iCol<=m_iNumCols-1;iCol++)
             {
                index[0] = iRow;
                index[1] = iCol;
                if(m_bFillWithStrings)      //Fill with Strings.
                {
                   VARIANT v;
                   CString s;
                   VariantInit(&v);
                   v.vt = VT_BSTR;
                   s.Format("r%dc%d", iRow, iCol);
                   v.bstrVal = s.AllocSysString();
                   saRet.PutElement(index, v.bstrVal);
                   SysFreeString(v.bstrVal);
                   VariantClear(&v);
                }
                else                     //Fill with Numbers.
                {
                   double d;
                   d = (iRow*1000) + iCol;
                   saRet.PutElement(index, &d);
                }
             }
          }
    
          //Set the range value to the SAFEARRAY.
          range.SetValue(COleVariant(saRet));
          saRet.Detach();
    
          //Return control of Excel to the user.
          objApp.SetVisible(TRUE);
          objApp.SetUserControl(TRUE);
    					
  5. 컴파일 및 프로젝트 실행.
  6. 대화 상자의 컨트롤에 대한 다음 값 지정:
          Control               Contents
          ------------------------------
          IDC_STARTINGCELL      A1
          IDC_NUMROWS           10
          IDC_NUMCOLS           5
          IDC_STRING            True
    						
    확인을 클릭하십시오.

    결과: 있는 새 통합 문서가 생성되고 첫 번째 워크시트의 셀을 A1:E10 문자열 값으로 채워집니다.
  7. 대화 상자의 컨트롤에 대한 다음 값 지정:
          Control               Contents
          ------------------------------
          IDC_STARTINGCELL      C3
          IDC_NUMROWS           2
          IDC_NUMCOLS           9
          IDC_STRING            False
    						
    확인을 클릭하십시오.

    결과: 있는 새 통합 문서가 생성되고 첫 번째 워크시트의 셀을 C3:K4 숫자 값으로 채워집니다.

참조

MFC를 사용하여 Microsoft Excel을 자동화하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
186122MFC를 사용하여 Excel 자동화 및 배열에 있는 Range 개체를 얻는 방법

184663포함 및 MFC 사용하여 Microsoft Excel 워크시트 자동화하는 방법

179706MFC 사용하여 Excel 자동화 및 새 통합 문서 만들기 서식

178781MFC 및 워크시트 함수를 사용하여 Excel을 자동화하는 방법

178783MFC를 사용하여 Microsoft Excel 차트 만드는 방법

속성

기술 자료: 186120 - 마지막 검토: 2007년 1월 23일 화요일 - 수정: 4.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
키워드:?
kbmt kbautomation kbcode kbhowto kbinterop KB186120 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

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