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

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: 178781
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Résumé
Cet article explique comment automatiser Microsoft Excel 97, Microsoft Excel 2000, Microsoft Excel 2002 ou Microsoft Excel 2003 à l'aide de la bibliothèque Microsoft Foundation Class (MFC), version 4.2 (installé avec les versions 5.0 et 6.0 de Microsoft Visual C++). Plus précisément, cet article illustre comment utiliser des fonctions de feuille de calcul fournies par un complément telles que l'utilitaire d'analyse (ATP) et comment utiliser les fonctions de formule de feuille de calcul sont intégrées à Microsoft Excel.
Plus d'informations
Vous pouvez copier le code dans cet article à la fonction de gestionnaire de messages d'un événement défini dans un fichier .cpp MFC. Toutefois, l'objectif du code est d'illustrer le processus d'utilisation les interfaces IDispatch et les fonctions membres définies dans Excel8.olb pour Excel 97, dans Excel9.olb pour Excel 2000 et dans Excel.exe de Excel 2002 et Excel 2003 type bibliothèque. Le principal avantage vient de la lecture et de comprendre le code dans l'exemple, afin que vous pouvez modifier l'exemple ou écrire du code à partir de zéro pour automatiser une fonction de feuille de calcul dans Microsoft Excel à l'aide de MFC.

Étapes pour créer le projet

  1. Suivez les étapes 1 à 12 de l'article suivant de la base de connaissances Microsoft pour créer un projet exemple qui utilise les interfaces IDispatch et les fonctions membres définies dans Excel8.olb, ou Excel9.olb ou Excel.exe pour Excel 2002 et de bibliothèque de type Excel 2003 :
    178749Comment faire pour créer un projet Automation à l'aide de MFC et d'une bibliothèque de types
  2. En haut de la AutoProjectDlg.cpp, ajoutez la ligne suivante :
          #include "excel8.h"					
    si vous automatisez Excel 2000, incluez excel9.h. Si vous automatisez Excel 2002 ou Excel 2003, incluez excel.h

  3. Ajoutez le code suivant à CAutoProjectDlg::OnRun () dans le fichier AutoProjectDLG.cpp : exemple de code :
          try      {      _Application app;     // app is an _Application object.      _Workbook book;       // More object declarations.      _Worksheet sheet;      Workbooks books;      Worksheets sheets;      Range range;          // Used for Microsoft Excel 97 components.      LPDISPATCH lpDisp;    // Often reused variable.      // Common OLE variants. Easy variants to use for calling arguments.      COleVariant        covTrue((short)TRUE),        covFalse((short)FALSE),        covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);      // Start Microsoft Excel, get _Application object,      // and attach to app object.      if(!app.CreateDispatch("Excel.Application"))       {        AfxMessageBox("Couldn't CreateDispatch() for Excel");        return;       }      // Set visible.      app.SetVisible(TRUE);      // Register the Analysis ToolPak.      CString sAppPath;      sAppPath.Format ("%s\\Analysis\\Analys32.xll", app.GetLibraryPath());      if(!app.RegisterXLL(sAppPath))        AfxMessageBox("Didn't register the Analys32.xll");      // Get the Workbooks collection.      lpDisp = app.GetWorkbooks();     // Get an IDispatch pointer.      ASSERT(lpDisp);      books.AttachDispatch(lpDisp);    // Attach the IDispatch pointer                                       // to the books object.      // Open a new workbook and attach that IDispatch pointer to the      // Workbook object.      lpDisp = books.Add( covOptional );      ASSERT(lpDisp);      book.AttachDispatch( lpDisp );         // To open an existing workbook, you need to provide all         // arguments for the Open member function. In the case of          // Excel 2002 you must provide 16 arguments.         // However in Excel 2003 you must provide 15 arguments.         // The code below opens a workbook and adds it to the Workbook's         // Collection object. It shows 13 arguments, required for Excel         // 2000.         // You need to modify the path and file name for your own         // workbook.      //       // lpDisp = books.Open("C:\\Test",     // Test.xls is a workbook.      // covOptional, covOptional, covOptional, covOptional, covOptional,      // covOptional, covOptional, covOptional, covOptional, covOptional,      // covOptional, covOptional );   // Return Workbook's IDispatch      // pointer.      // Get the Sheets collection and attach the IDispatch pointer to your      // sheets object.      lpDisp = book.GetSheets();      ASSERT(lpDisp);      sheets.AttachDispatch(lpDisp);      // Get sheet #1 and attach the IDispatch pointer to your sheet      // object.      lpDisp = sheets.GetItem( COleVariant((short)(1)) );                                        //GetItem(const VARIANT &index)      ASSERT(lpDisp);      sheet.AttachDispatch(lpDisp);      // Fill range A1 with "1/25/98", the settlement date.      lpDisp = sheet.GetRange(COleVariant("A1"), COleVariant("A1"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("1/25/98")); // Excel 97 & Excel 2000range.SetValue2(COleVariant("1/25/98")); // Excel 2002 and Excel 2003      // Fill range A2 with "11/15/99", the maturity date.      lpDisp = sheet.GetRange(COleVariant("A2"), COleVariant("A2"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("11/15/99"));  // Excel 97 & Excel 2000range.SetValue2(COleVariant("11/15/99")); // Excel 2002 and Excel 2003      // Fill range A3 with "2", the frequency for semi-annual interest      // payments.      lpDisp = sheet.GetRange(COleVariant("A3"), COleVariant("A3"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("2"));  // Excel 97 & Excel 2000range.SetValue2(COleVariant("2"));  // Excel 2002 and Excel 2003      // Fill range A4 with 1, the basis (actual/actual).      lpDisp = sheet.GetRange(COleVariant("A4"), COleVariant("A4"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("1")); // Excel 97 & Excel 2000range.SetValue2(COleVariant("1")); // Excel 2002 and  Excel 2003      // Fill range C1 with the formula "=COUPNCD(A1, A2, A3, A4)" and      // format the cell with a Date type of the Number format.      lpDisp = sheet.GetRange(COleVariant("C1"), COleVariant("C1"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetNumberFormat(COleVariant("mm/dd/yy"));      range.SetFormula(COleVariant("=COUPNCD(A1, A2, A3, A4)"));      /* This is an alternative that works without placing variables on      // the worksheet.      // The values are arguments contained in the SetFormula() call.      // range.SetFormula(COleVariant(                       "=COUPNCD(\"09/15/96\",\"11/15/99\",2,1)"));      */       // *** The example in this block uses a built-in Microsoft Excel      // function.      // You do not have to register any add-in to use the built-in      // Microsoft Excel worksheet functions.      lpDisp = sheet.GetRange(COleVariant("C3"), COleVariant("C3"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetFormula(COleVariant("=SUM(A3, A4)"));      // or use:      // range.SetFormula(COleVariant("=SUM(2,1)"));      // *** End of example for built-in function usage.      // Release dispatch pointers.      range.ReleaseDispatch();      sheet.ReleaseDispatch();      // This is not really necessary because      // the default second parameter of AttachDispatch releases      // when the current scope is lost.      } // End of processing.        catch(COleException *e)      {        char buf[1024];     // For the Try...Catch error message.        sprintf(buf, "COleException. SCODE: %08lx.", (long)e->m_sc);        ::MessageBox(NULL, buf, "COleException", MB_SETFOREGROUND | MB_OK);      }      catch(COleDispatchException *e)      {        char buf[1024];     // For the Try...Catch error message.        sprintf(buf,               "COleDispatchException. SCODE: %08lx, Description: \"%s\".",               (long)e->m_wCode,(LPSTR)e->m_strDescription.GetBuffer(512));        ::MessageBox(NULL, buf, "COleDispatchException",                           MB_SETFOREGROUND | MB_OK);      }      catch(...)      {        ::MessageBox(NULL, "General Exception caught.", "Catch-All",                           MB_SETFOREGROUND | MB_OK);      }					
Références
Pour plus d'informations sur l'Automation des applications Office, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
222101Comment : Rechercher et utiliser la documentation du modèle objet Office
VC ++ Automation MFC typelib IDispatch ATP toolpack

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 178781 - Dernière mise à jour : 12/05/2015 08:16:13 - Révision : 4.2

Microsoft Foundation Class Library 4.2, Microsoft Excel 2002

  • kbnosurvey kbarchive kbmt kbautomation kbhowto kbinterop KB178781 KbMtfr
Commentaires