Comment faire pour utiliser MFC pour automatiser Excel et remplir une plage avec un tableau

Traductions disponibles Traductions disponibles
Numéro d'article: 186120 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article explique comment automatiser Microsoft Excel et remplir une plage de cellules avec un tableau de valeurs.

Plus d'informations

Pour remplir une plage de cellules sans remplir les cellules une par une, vous devez créer une variante à deux dimensions SAFEARRAY que vous transmettez vers Excel en appelant la fonction DéfinirValeur pour l'objet Range. Les étapes suivantes illustrent ce processus.

Remarques pour automatiser Microsoft Excel 2000 et 2002

L'exemple de code dans cet article utilise des wrappers de classe générés à partir de la bibliothèque d'objet Excel 97 (Excel 8.olb). Légère modification, ce code peut être appliqué à un client Automation qui utilise des wrappers de classe pour Excel 2000 (Excel9.olb) ou Excel 2002 (Excel.olb). Pour plus d'informations sur l'utilisation de l'exemple de code décrit dans cet article avec Microsoft Excel 2000 ou 2002 type bibliothèque, cliquez sur le numéro ci-dessous pour afficher elle dans la base de connaissances Microsoft :
224925Information : Les bibliothèques de types pour Office peuvent changer avec la nouvelle version

Étapes de création de projet

  1. Suivez les étapes 1 à 12 dans l'article suivant dans la base de connaissances Microsoft pour créer un exemple de projet qu'utilise les interfaces IDispatch et les fonctions membres définies dans la bibliothèque de type Excel8.olb :
    178749Comment faire pour créer un projet Automation à l'aide de MFC et d'une bibliothèque de types
  2. À la boîte de dialogue créée aux étapes 4 et 5 de la de l'article parent 178749, ajoutez les contrôles suivants avec les propriétés comme indiqué. Ajoutez également les variables de membre correspondant :
                                      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. En haut du fichier AutoProjectDlg.cpp, ajoutez la ligne suivante :
          #include "excel8.h"
    					
  4. Ajoutez le code suivant à CAutoProjectDlg::OnRun () dans le fichier AutoProjectDlg.cpp.

    Exemple de code

          // 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. Compilez et exécutez le projet.
  6. Spécifiez les valeurs suivantes pour les contrôles de la boîte de dialogue :
          Control               Contents
          ------------------------------
          IDC_STARTINGCELL      A1
          IDC_NUMROWS           10
          IDC_NUMCOLS           5
          IDC_STRING            True
    						
    cliquez sur OK.

    Résultats : Un nouveau classeur est généré et cellules a1 à E10 de la première feuille de calcul sont remplis avec des valeurs de chaîne.
  7. Spécifiez les valeurs suivantes pour les contrôles de la boîte de dialogue :
          Control               Contents
          ------------------------------
          IDC_STARTINGCELL      C3
          IDC_NUMROWS           2
          IDC_NUMCOLS           9
          IDC_STRING            False
    						
    cliquez sur OK.

    Résultats : Un nouveau classeur est généré et C3:K4 de cellules de la première feuille de calcul sont remplis avec des valeurs numériques.

Références

Pour plus d'informations sur l'automatisation de Microsoft Excel à l'aide de MFC, consultez les articles suivants dans la base de connaissances Microsoft :
186122Comment faire pour utiliser MFC pour automatiser Excel et obtenir un tableau à partir d'une plage

184663Comment faire pour incorporer et automatiser une feuille de calcul Microsoft Excel avec MFC

179706Utiliser MFC pour automatiser Excel et créer/mettre en forme un nouveau classeur

178781Comment faire pour automatiser Excel à l'aide de MFC et des fonctions de feuille de calcul

178783Comment faire pour utiliser MFC pour créer un graphique Microsoft Excel

Propriétés

Numéro d'article: 186120 - Dernière mise à jour: mardi 23 janvier 2007 - Version: 4.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Excel 2000 Standard
  • Microsoft Visual C++ 5.0 Édition Entreprise
  • Microsoft Visual C++ 6.0 Édition Entreprise
  • Microsoft Visual C++ 5.0 Édition Professionnelle
  • Microsoft Visual C++ 6.0 Édition Professionnelle
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Excel 2002
  • Microsoft Excel 97 Standard
Mots-clés : 
kbmt kbautomation kbcode kbhowto kbinterop KB186120 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 186120
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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