Verwenden von MFC zum Automatisieren von Excel und Füllen eines Bereichs mit einem Array

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 186120 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt die Microsoft Excel automatisieren und einen aus mehreren Zellen bestehenden Bereich mit einem Array von Werten füllen.

Weitere Informationen

Um einen aus mehreren Zellen bestehenden Bereich zu füllen ohne die Zellen-einzeln füllen zu müssen, müssen Sie eine zweidimensionale Variante SAFEARRAY erstellen, die Sie an Excel, übergeben indem Sie die SetzenWert-Funktion für das Range-Objekt aufrufen. Die folgenden Schritte veranschaulichen diesen Prozess.

Hinweise zur Automatisierung von Microsoft Excel 2000 und 2002

Der Beispielcode in diesem Artikel wird aus der Excel 97-Objekt Bibliothek (Excel 8.olb) generierte Klassenwrapper verwendet. Mit geringfügigen Änderungen kann diesen Code auf einen Automatisierungsclient angewendet werden, der Klassenwrapper für Excel 2000 (Excel9.olb) oder Excel 2002 (Excel.olb) verwendet. Weitere Informationen zur Verwendung des Beispielcodes in diesem Artikel mit Microsoft Excel 2000 oder 2002 Typ Bibliothek beschriebenen finden Sie die Artikelnummer unten klicken, um es in der Microsoft Knowledge Base:
224925INFO: Typbibliotheken für Office können sich mit neuen Version ändern.

Schritte zum Erstellen des Projekts

  1. Führen Sie die Schritte 1 bis 12 in der folgenden Artikel in der Microsoft Knowledge Base, verwendet die IDispatch-Schnittstellen und Memberfunktionen, in der Bibliothek Excel8.olb Typ definiert ein Beispielprojekt erstellen:
    178749Gewusst wie: Erstellen eines Automatisierungsprojekts mit MFC und einer Typenbibliothek
  2. Fügen Sie in den Schritten 4 und 5 des übergeordneten Artikel 178749 im Dialogfeld folgende Steuerelemente mit Eigenschaften wie angegeben. Fügen Sie auch die entsprechenden Membervariablen:
                                      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. Fügen Sie am oberen Rand der Datei "AutoProjectDlg.cpp die folgende Zeile:
          #include "excel8.h"
    					
  4. Fügen Sie folgenden Code hinzu CAutoProjectDlg::OnRun() in der Datei "AutoProjectDlg.cpp.

    Beispielcode

          // 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. Kompilieren und Sie das Projekt und führen Sie es aus.
  6. Geben Sie die folgenden Werte für die Steuerelemente im Dialogfeld:
          Control               Contents
          ------------------------------
          IDC_STARTINGCELL      A1
          IDC_NUMROWS           10
          IDC_NUMCOLS           5
          IDC_STRING            True
    						
    auf OK.

    Ergebnisse: Eine neue Arbeitsmappe wird generiert und die Zellen a1: E10 des ersten Arbeitsblatts werden mit Zeichenfolgenwerten gefüllt.
  7. Geben Sie die folgenden Werte für die Steuerelemente im Dialogfeld:
          Control               Contents
          ------------------------------
          IDC_STARTINGCELL      C3
          IDC_NUMROWS           2
          IDC_NUMCOLS           9
          IDC_STRING            False
    						
    auf OK.

    Ergebnisse: Eine neue Arbeitsmappe wird generiert und die Zellen C3:K4 des ersten Arbeitsblatts werden mit numerischen Werten gefüllt.

Informationsquellen

Weitere Informationen zu Microsoft Excel unter Verwendung von MFC zu automatisieren finden Sie in die folgenden Artikeln der Microsoft Knowledge Base:
186122Verwenden Sie MFC zum Automatisieren von Excel und erhalten ein Array aus einem Bereich

184663Einbetten und Automatisieren von einem Microsoft Excel-Arbeitsblatt mit MFC

179706Verwenden von MFC zu Excel automatisieren und eine neue Arbeitsmappe erstellen bzw. Format

178781Automatisieren von Excel mit MFC und Tabellenfunktionen

178783Verwendung von MFC zum Erstellen einer Microsoft Excel-Diagramm

Eigenschaften

Artikel-ID: 186120 - Geändert am: Dienstag, 23. Januar 2007 - Version: 4.2
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbmt kbautomation kbcode kbhowto kbinterop KB186120 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 186120
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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