Comment utiliser une bibliothèque de types pour Office Automation à partir de Visual C++.NET

Résumé

Cet article explique comment créer un projet .NET Visual C++ qui agit en tant que client Automation pour les applications compatibles COM (Component Object Model). L’exemple de cet article utilise microsoft Foundation Classes (MFC) avec des wrappers de classe pour un composant Office.

Informations supplémentaires

Les étapes suivantes montrent comment créer un client Automation simple. Cette procédure comporte trois étapes principales :

  1. Créez le client Automation.
  2. Ajoutez du code pour automatiser Microsoft Excel.
  3. Exécutez le client Automation.

Vous pouvez utiliser la première étape (Créer le client Automation) pour créer un client Automation, quel que soit le serveur Automation que vous utilisez. La deuxième étape (Ajouter du code pour automatiser Microsoft Excel) est spécifique au serveur Automation.

Créer un client Automation

  1. Démarrez Microsoft Visual Studio .NET. Dans le menu Fichier, cliquez sur Nouveau, puis sur Projet. Sélectionnez l’application MFC dans les types de projets Visual C++, puis nommez le projet AutoProject.

  2. Lorsque l’Assistant Application MFC s’affiche, cliquez sur Type d’application, définissez le type d’application sur Boîte de dialogue, puis cliquez sur Terminer.

  3. Modifiez la boîte de dialogue IDD_AUTOPROJECT_DIALOG comme suit :

    1. Supprimez le contrôle Label (IDC_STATIC) et le bouton Annuler (IDCANCEL).
    2. Remplacez l’ID de l’OKbutton par « IDRUN » et la légende par « Exécuter ».
  4. Créez des wrappers de classe à partir de la bibliothèque de types pour le serveur Automation comme suit :

    1. Dans Explorateur de solutions, cliquez avec le bouton droit sur AutoProject, puis cliquez sur Ajouter une classe.

    2. Cliquez sur classe MFC à partir de Typelib, puis sur Ouvrir.

    3. Cliquez sur Ajouter une classe à partir de : Registre, puis recherchez la bibliothèque de types inscrite pour votre serveur Automation.

      Pour cet exemple, sélectionnez « Bibliothèque de types Microsoft Excel 10.0 » pour Microsoft ExcelXP ou « Bibliothèque de types Microsoft Excel 9.0 » pour Microsoft Excel 2000.

    4. Sélectionnez les interfaces dont vous avez besoin dans la liste, puis cliquez sur le symbole supérieur à (>) pour les ajouter à la liste des interfaces pour lesquelles MFC crée des wrappers. Cliquez sur Terminer lorsque vous avez ajouté toutes les interfaces.

      Pour cet exemple, vous avez uniquement besoin de l’interface _Application.

      Important S’il existe de nombreuses interfaces dans la bibliothèque de types que vous avez choisie, sélectionnez uniquement les interfaces que vous utiliserez, car MFC génère un fichier d’en-tête distinct pour chaque interface sélectionnée. En réduisant vos sélections d’interface, vous pouvez éviter une surcharge inutile pendant la génération et la compilation de fichiers.

  5. Pour charger et activer la bibliothèque de services COM dans la fonction CAutoProjectApp::InitInstance, ajoutez le code suivant :

    if(!AfxOleInit())  // Your addition starts here.
    {
      AfxMessageBox("Cannot initialize COM dll");
      return FALSE;
      // End of your addition.
    }
    
    AfxEnableControlContainer();
    
    
  6. Ajoutez une directive Include pour chaque fichier d’en-tête généré à partir des interfaces de la bibliothèque de types du serveur Automation. Ajoutez les directives après l’instruction Include pour Stdafx.h en haut de AutoProjectDlg.cpp.

    Pour cet exemple, ajoutez un include pour le fichier d’en-tête CApplication.h, qui est généré pour l’interface _Application :

          #include "stdafx.h"
          #include "CApplication.h"
    
    

Ajouter du code pour automatiser Microsoft Excel

Dans la boîte de dialogue IDD_AUTOPROJECT_DIALOG, cliquez avec le bouton droit sur Exécuter, puis cliquez sur Ajouter un gestionnaire d’événements dans la zone de liste déroulante. Dans l’Assistant Gestionnaire d’événements, sélectionnez le type de message BN_CLICKED, puis cliquez sur Ajouter et modifier. Ajoutez le code suivant pour automatiser Excel dans le gestionnaire :

void CAutoProjectDlg::OnBnClickedRun()
{
   CApplication app;  // app is the Excel _Application object

// Start Excel and get Application object.

if(!app.CreateDispatch("Excel.Application"))
   {
      AfxMessageBox("Cannot start Excel and get Application object.");
      return;
   }
   else
   {
      //Make the application visible and give the user control of
      //Microsoft Excel.
      app.put_Visible(TRUE);
      app.put_UserControl(TRUE);
   }
} 

Exécuter le client Automation

Appuyez sur la touche F5 pour générer et exécuter le client Automation. Lorsque la boîte de dialogue s’affiche, cliquez sur Exécuter. Le client Automation démarre Excel et rend l’application visible. Notez qu’Excel reste en cours d’exécution même lorsque le client Automation se termine, car l’utilisateur a reçu le contrôle de l’application.

Notes supplémentaires

Une fois que vous avez ajouté des classes d’une bibliothèque de types à votre projet, vous remarquerez peut-être qu’elles apparaissent dans l’affichage des classes de votre projet. En mode Classe, vous pouvez double-cliquer sur une classe pour afficher les méthodes de cette classe, puis double-cliquer sur la méthode pour afficher la définition de cette fonction dans le fichier d’implémentation du wrapper MFC. Vous pouvez examiner la définition d’une fonction membre si vous souhaitez vérifier un type de retour ou si vous devez modifier une implémentation d’une fonction.

Bien que les étapes précédentes montrent comment automatiser Microsoft Excel, vous pouvez appliquer les mêmes idées pour automatiser d’autres applications. La liste suivante contient les noms de fichiers pour les bibliothèques de types d’autres applications Microsoft Office :

| Application| Bibliothèque de types| |---|---| | Microsoft Access 97| Msacc8.olb| | Microsoft Jet Database 3.5|DAO350.dll| | Microsoft Binder 97| Msbdr8.olb| | Microsoft Excel 97| Excel8.olb| | Microsoft Graph 97| Graph8.olb| | Microsoft Office 97|Mso97.dll| | Microsoft Outlook 97| Msoutl97.olb| | Microsoft PowerPoint 97| Msppt8.olb| | Microsoft Word 97| Msword8.olb| ||| | Microsoft Access 2000| Msacc9.olb| | Microsoft Jet Database 3.51|DAO360.dll| | Microsoft Binder 2000| Msbdr9.olb| | Microsoft Excel 2000| Excel9.olb| | Microsoft Graph 2000| Graph9.olb| | Microsoft Office 2000|Mso9.dll| | Microsoft Outlook 2000| Msoutl9.olb| | Microsoft PowerPoint 2000| Msppt9.olb| | Microsoft Word 2000| Msword9.olb | ||| | Microsoft Access 2002| Msacc.olb| | Microsoft Excel 2002|Excel.exe| | Microsoft Graph 2002|Graph.exe| | Microsoft Office 2002|MSO.dll| | Microsoft Outlook 2002| MSOutl.olb| | Microsoft PowerPoint 2002| MSPpt.olb| | Microsoft Word 2002| MSWord.olb| ||| | Microsoft Office Access 2003| Msacc.olb| | Microsoft Office Excel 2003|Excel.exe| | Microsoft Office Graph 2003|Graph.exe| | Microsoft Office 2003|MSO.dll| | Microsoft Office Outlook 2003| MSOutl.olb| | Microsoft Office PowerPoint 2003| MSPpt.olb| | Microsoft Office Word 2003| MSWord.olb| ||| | Microsoft Office Access 2007| Msacc.olb| | Microsoft Office Excel 2007|Excel.exe| | Microsoft Office Graph 2007|Graph.exe| | 2007 Microsoft Office|MSO.dll| | Microsoft Office Outlook 2007| MSOutl.olb| | Microsoft Office PowerPoint 2007| MSPpt.olb| | Microsoft Office Word 2007| MSWord.olb| Notez que l’emplacement par défaut de ces bibliothèques de types est :

| Version d’Office| Chemin d’accès| |---|---| | Office 97| C:\Program Files\Microsoft Office\Office| | Office 2000| C:\Program Files\Microsoft Office\Office| | Office XP| C:\Program Files\Microsoft Office\Office10| | Office 2003| C:\Program Files\Microsoft Office\Office11| |2007 Office| C:\Program Files\Microsoft Office\Office12| L’emplacement par défaut pour Dao350.dll et Dao360.dll est C:\Program Files\Common Files\Microsoft Shared\Dao.