Comment utiliser MFC pour automatiser Excel 2000 et Excel 2002 et obtenir un tableau à partir d'une plage dans Excel 2000 et Excel 2002

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

Sommaire

Résumé

Cet article explique comment automatiser Microsoft Excel et renvoyer les valeurs à partir d'une plage de cellules dans un tableau.

Plus d'informations

Pour retourner les valeurs à partir d'une plage de cellules sans interroger les cellules une par une, vous devez utiliser la fonction de membre GetValue de l'objet Range pour renvoyer les valeurs à un VARIANT. Vous ensuite construire un SAFEARRAY basé sur le VARIANT renvoyé par GetValue. Une fois que vous avez SAFEARRAY, vous pouvez accéder aux éléments à l'aide de GetElement. Les étapes suivantes illustrent ce processus et montrent comment accéder à la fois les éléments numériques et chaîne.

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 l'article correspondant 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. Dans Microsoft Excel, créez un nouveau classeur. Remplir des cellules A1:C8 avec un mélange de données numériques ou de chaîne. Enregistrez le classeur en tant que «c:\test.xls», puis quittez Microsoft Excel.
  2. 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 d'Automation à l'aide de MFC et d'une bibliothèque de types
  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 objRange;
          VARIANT ret;
    
          // Instantiate Excel and open an existing workbook.
          objApp.CreateDispatch("Excel.Application");
          objBooks = objApp.GetWorkbooks();
          objBook = objBooks.Open("C:\\Test.xls",
                    VOptional, VOptional, VOptional, VOptional,
                    VOptional, VOptional, VOptional, VOptional,
                    VOptional, VOptional, VOptional, VOptional);
          objSheets = objBook.GetWorksheets();
          objSheet = objSheets.GetItem(COleVariant((short)1));
    
          //Get the range object for which you wish to retrieve the
          //data and then retrieve the data (as a variant array, ret).
          objRange = objSheet.GetRange(COleVariant("A1"), COleVariant("C8"));
          ret = objRange.GetValue();
    
          //Create the SAFEARRAY from the VARIANT ret.
          COleSafeArray sa(ret);
    
          //Determine the array's dimensions.
          long lNumRows;
          long lNumCols;
          sa.GetUBound(1, &lNumRows);
          sa.GetUBound(2, &lNumCols);
    
          //Display the elements in the SAFEARRAY.
          long index[2];
          VARIANT val;
          int r, c;
          TRACE("Contents of SafeArray\n");
          TRACE("=====================\n\t");
          for(c=1;c<=lNumCols;c++)
          {
             TRACE("\t\tCol %d", c);
          }
          TRACE("\n");
          for(r=1;r<=lNumRows;r++)
          {
             TRACE("Row %d", r);
             for(c=1;c<=lNumCols;c++)
             {
                index[0]=r;
                index[1]=c;
                sa.GetElement(index, &val);
                switch(val.vt)
                {
                case VT_R8:
                   {
                      TRACE("\t\t%1.2f", val.dblVal);
                      break;
                   }
                case VT_BSTR:
                   {
                      TRACE("\t\t%s",(CString)val.bstrVal);
                      break;
                   }
    
                case VT_EMPTY:
                   {
                      TRACE("\t\t<empty>");
                      break;
                   }
                }
             }
             TRACE("\n");
          }
    
          //Close the workbook without saving changes
          //and quit Microsoft Excel.
          objBook.Close(COleVariant((short)FALSE), VOptional, VOptional);
          objApp.Quit();
    					
  5. Compilez le projet et exécutez-le.
  6. Cliquez sur Exécuter. Les valeurs des cellules A1:C8 sont affichés dans la fenêtre Sortie.

Références

Pour plus d'informations sur l'automatisation de Microsoft Excel à l'aide de MFC, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la base de connaissances Microsoft :
186120Comment faire pour utiliser MFC pour automatiser Excel et remplir une plage avec un tableau
184663Comment faire pour incorporer et automatiser une feuille de calcul Microsoft Excel avec MFC
179706Comment faire pour utiliser MFC pour automatiser Excel et créer/mettre en forme un nouveau classeur
178781Comment faire : Automatiser Excel à l'aide de MFC et des fonctions de feuille de calcul
178783Comment faire : Utiliser MFC pour créer un graphique Microsoft Excel
167668Comment passer un SafeArray de chaînes dans un VARIANT *

Propriétés

Numéro d'article: 186122 - Dernière mise à jour: mardi 23 janvier 2007 - Version: 5.1
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 kbprogramming kbfunctions kbautomation kbhowto kbinterop KB186122 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: 186122
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