PROCÉDURE : Utiliser une bibliothèque de types pour l'automatisation d'Office à partir de Visual C++ .NET

Résumé

Cet article explique comment créer un projet Visual C++ .NET qui agit comme un client Automation pour des applications compatibles COM (Component Object Model). L'exemple de code présenté dans cet article utilise MFC (Microsoft Foundation Classes) avec des wrappers de classes pour un composant Office.

Plus d'informations

La procédure suivante illustre comment générer un client Automation simple. Cette procédure se compose de trois étapes principales :

  1. Création d'un client AutomationAjout d'un code pour automatiser Microsoft ExcelExécution du client Automation
  2. Ajout d'un code pour automatiser Microsoft ExcelExécution du client Automation
  3. Exécution du client Automation
La première étape, Création d'un client Automation, permet de créer un nouveau client Automation indépendamment du serveur Automation que vous utilisez. La deuxième étape, Ajout d'un code pour automatiser Microsoft Excel, est spécifique au serveur Automation.

Création d'un client Automation

  1. Démarrez Microsoft Visual Studio .NET. Dans le menu Fichier, cliquez sur Nouveau, puis sur Projet. Dans les types de projets Visual C++, sélectionnez Application MFC et nommez le projet AutoProject.
  2. Lorsque l'Assistant Application MFC apparaît, cliquez sur Type d'application, définissez le type d'application sur Basée sur une boîte de dialogue, puis cliquez sur Terminer.
  3. Modifiez la boîte de dialogue IDD_AUTOPROJECT_DIALOG de la manière suivante :
    1. Supprimez le contrôle Étiquette (IDC_STATIC) ainsi que le bouton Annuler (IDCANCEL).
    2. Remplacez l'ID du bouton OK par "IDRUN" et la légende par "Exécuter".
  4. Créez des wrappers de classes à partir de la bibliothèque de types pour le serveur Automation, en procédant comme suit :
    1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur AutoProject, puis cliquez sur Ajouter une classe.
    2. Cliquez sur Classe MFC à partir d'une TypeLib, puis sur Ouvrir.
    3. Cliquez sur À partir du : Fichier, puis recherchez la bibliothèque de types appropriée pour votre serveur Automation.

      Pour cet exemple, sélectionnez Excel9.olb pour Microsoft Excel 2000 ou Excel.exe pour Microsoft Excel 2002.
    4. Dans la liste, sélectionnez la ou les interfaces dont vous avez besoin, puis cliquez sur le symbole 'supérieur à' (>) pour les ajouter à la liste des interfaces pour lesquelles MFC doit créer des wrappers. Cliquez sur Terminer, une fois toutes les interfaces ajoutées.

      Dans cet exemple, seule l'interface _Application est nécessaire.

      IMPORTANT : si la bibliothèque de types choisie contient plusieurs interfaces, sélectionnez uniquement celles que vous envisagez d'utiliser car MFC génèrera un fichier d'en-tête distinct pour chaque interface sélectionnée. En sélectionnant un nombre minimal d'interfaces, vous pouvez éviter une baisse inutile des performances lors de la création et de la compilation des fichiers.
  5. Pour charger et activer la bibliothèque des services COM pour la fonction CAutoProjectApp::InitInstance, ajoutez le code suivant :
    if(!AfxOleInit())  // L'insertion débute ici.
    {
    AfxMessageBox("Impossible d'initialiser une dll COM");
    return FALSE;
    // L'insertion se termine ici.
    }

    AfxEnableControlContainer();
  6. Ajoutez une ligne include pour chaque fichier d'en-tête généré à partir des interfaces de la bibliothèque de types du serveur Automation. Vous devez ajouter ces lignes après l'instruction include pour Stdafx.h, au début de AutoProjectDlg.cpp.

    Dans cet exemple, ajoutez une ligne include pour le fichier d'en-tête CApplication.h, généré pour l'interface _Application.
          #include "stdafx.h"
    #include "CApplication.h"

Ajout d'un 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 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 est l'objet _Application d'Excel

// Démarrez Excel et récupérez l'objet Application.

if(!app.CreateDispatch("Excel.Application"))
{
AfxMessageBox("Impossible de démarrer Excel et de récupérer l'objet Application.");
return;
}
else
{
//Rendre l'application visible et donner le contrôle de
//Microsoft Excel à l'utilisateur.
app.put_Visible(TRUE);
app.put_UserControl(TRUE);
}
}

Exécution du client Automation

Appuyez sur la touche F5 pour créer et exécuter le client Automation. Lorsque la boîte de dialogue apparaît, cliquez sur Exécuter. Le client Automation démarre Excel et rend l'application visible. Notez que l'exécution d'Excel se poursuit même si celle du client Automation se termine, car l'utilisateur a obtenu le contrôle de l'application.

Remarques supplémentaires

Une fois les classes ajoutées à votre projet à partir d'une bibliothèque de types, notez qu'elles apparaissent dans l'Affichage des classes de votre projet. Dans l'Affichage des classes, vous pouvez double-cliquer sur une classe pour afficher les fonctions qu'elle contient, puis double-cliquer sur ces fonctions pour afficher leur définition dans le fichier de mise en oeuvre du wrapper MFC. Vous pouvez examiner la définition d'une fonction membre pour vérifier le type de renvoi ou pour modifier éventuellement la mise en oeuvre de la fonction.

Bien que les étapes précédentes permettent d'automatiser Microsoft Excel, vous pouvez appliquer les mêmes principes pour automatiser d'autres applications. La liste ci-dessous répertorie les fichiers correspondant aux 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
REMARQUE : par défaut, ces bibliothèques de types sont incluses dans C:\Program Files\Microsoft Office\Office (pour Office 2002, le chemin est C:\...\Office10), à l'exception de Dao350.dll, Dao360.dll et MSO.dll (Microsoft Office 10). L'emplacement par défaut de Dao350.dll et Dao360.dll est C:\Program Files\Common Files\Microsoft Shared\Dao ; l'emplacement par défaut de MSO.dll est C:\Program Files\Common Files\Microsoft Shared\Office10.

Références

Pour obtenir des informations plus générales sur Visual C++ .NET, consultez le groupe de discussion Usenet suivant : Visitez le centre de support technique de Visual C++ .NET à l'adresse suivante :
Propriétés

ID d'article : 307473 - Dernière mise à jour : 23 déc. 2005 - Révision : 1

Commentaires