Comment utiliser le contrôle WebBrowser pour ouvrir des documents Office dans Visual C# 2005 ou dans Visual C# .NET

Pour obtenir une version Microsoft Visual Basic .NET de cet article, consultez 304643.

Résumé

Vous pouvez afficher ou incorporer un document Microsoft Office directement dans un formulaire Microsoft Visual C#. Microsoft Visual C# 2005 et Microsoft Visual C# .NET ne fournissent pas de contrôle OLE qui vous permet d’incorporer un document Office sur un formulaire. Si vous souhaitez incorporer un document existant et l’ouvrir en tant qu’objet de document ActiveX sur place dans un formulaire Visual C#, une solution potentielle consiste à utiliser le contrôle Microsoft WebBrowser.

Cet article montre comment accéder à un document Office existant et comment l’afficher dans un formulaire Visual C# à l’aide du contrôle WebBrowser.

Informations supplémentaires

Les documents ActiveX sont des objets OLE incorporés qui se comportent plus comme des contrôles ActiveX que les objets OLE traditionnels. Contrairement à un objet incorporé traditionnel, un document ActiveX n’est pas conçu pour être un objet contenu dans un document plus grand. Au lieu de cela, il est considéré en soi comme un document complet qui est simplement affiché (par exemple avec Microsoft Internet Explorer) ou collecté dans une ressource unique avec d’autres documents (par exemple, un fichier Microsoft Office Binder). Un document ActiveX hébergé dans le contrôle WebBrowser est toujours actif ; par conséquent, contrairement aux objets incorporés OLE traditionnels, il n’y a aucun sentiment d’activation sur place.

Bien que Visual C# 2005 et Visual C# .NET ne prennent pas en charge l’hébergement direct de documents ActiveX, vous pouvez utiliser le contrôle WebBrowser à cet effet. Le contrôle WebBrowser (Shdocvw.dll) fait partie d’Internet Explorer et ne peut être utilisé que sur les systèmes sur lequel Internet Explorer est installé.

Création d’une application Visual C# qui ouvre des documents Office

Pour créer une application Visual C# qui ouvre des documents Office, procédez comme suit :

  1. Créez un projet d’application Windows dans Visual C# 2005 ou dans Visual C# .NET. Form1 est créé par défaut.

    Note Dans Visual C# 2005, si vous ne trouvez pas le fichier SHDocVw.dll ou le fichier AxSHDocVw.dll, exécutez la commande suivante à l’invite de commandes Visual Studio :

    aximp %WINDIR%\system32\shdocvw.dll
    

    Ensuite, créez un proxy common language runtime (SHDocVw.dll) et un proxy Windows Forms (AxSHDocVw.dll) pour le contrôle Microsoft Web Browser. Pour ajouter les fichiers DLL dans Visual C# 2005, procédez comme suit :

    1. Sur le menu Projet, cliquez sur Ajouter une référence.
    2. Dans la boîte de dialogue Ajouter une référence, cliquez sur Parcourir.
    3. Recherchez, puis sélectionnez le fichier AxSHDocVw.dll et le fichier SHDocVw.dll.
    4. Pour ajouter des références de projet pour ces deux fichiers, cliquez sur OK.
  2. Dans le menu Outils, cliquez sur Personnaliser la boîte à outils pour ouvrir la boîte de dialogue Personnaliser la boîte à outils. Sous l’onglet Composants COM, ajoutez une référence à Microsoft WebBrowser. Cliquez sur OK pour ajouter le contrôle WebBrowser à la boîte à outils Windows Forms. Le contrôle WebBrowser s’affiche avec l’Explorateur de texte dans la boîte à outils.

    Note Dans Visual Studio 2005, vous n’avez pas à effectuer l’étape 2.

  3. À l’aide de la boîte à outils, ajoutez un contrôle WebBrowser, un contrôle OpenFileDialog et un contrôle CommandButton à Form1. Cela ajoute les variables membres AxWebBrowser1, OpenFileDialog1 et Button1 à la classe Form1. Dans Visual C# 2005, les variables membres webBrowser1, openFileDialog1 et button1 sont ajoutées.

  4. Dans Form1, double-cliquez sur Button1. Cela ajoute l’événement Button1_Click à Form1.

  5. Dans la fenêtre de code de Form1, ajoutez l’espace de noms suivant à la liste :

    using System.Reflection;
    
  6. Définissez un membre privé dans la classe Form1 comme suit :

    private Object oDocument;
    
  7. À la fin de la méthode InitializeComponent de la classe Form1, ajoutez le code suivant pour gérer les événements Form1_Load, Form1_Closed et axWebBrowser1_NavigateComplete2 :

    this.axWebBrowser1.NavigateComplete2 += new AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(this.axWebBrowser1_NavigateComplete2);
    this.Load += new System.EventHandler(this.Form1_Load);
    this.Closed += new System.EventHandler(this.Form1_Closed);
    
  8. Remplacer le code suivant

    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    
    

    avec :

    private void button1_Click(object sender, System.EventArgs e)
    {
    
    String  strFileName;
    
    //Find the Office document.
     openFileDialog1.FileName = "";
     openFileDialog1.ShowDialog();
     strFileName = openFileDialog1.FileName;
    
    //If the user does not cancel, open the document.
     if(strFileName.Length != 0)
     {
      Object refmissing = System.Reflection.Missing.Value;
      oDocument = null;
      axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
     }
    }
    
    public void Form1_Load(object sender, System.EventArgs e)
    {
     button1.Text = "Browse";
     openFileDialog1.Filter = "Office Documents(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt" ;
     openFileDialog1.FilterIndex = 1;
    }
    
    public void Form1_Closed(object sender, System.EventArgs e)
    {
     oDocument = null;
    }
    
    public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
    {
    
    //Note: You can use the reference to the document object to 
     //      automate the document server.
    
    Object o = e.pDisp;
    
    oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
    
    Object oApplication = o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null);
    
    Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null);
    
    MessageBox.Show("File opened by: " + oName.ToString() ); 
    }
    
    

    Note Vous devez modifier le code dans Visual Studio 2005. Par défaut, Visual C# ajoute un formulaire au projet lorsque vous créez un projet Windows Forms. Le formulaire est nommé Form1. Les deux fichiers qui représentent le formulaire sont nommés Form1.cs et Form1.designer.cs. Vous écrivez le code dans Form1.cs. Le fichier Form1.designer.cs est l’endroit où le concepteur Windows Forms écrit le code qui implémente toutes les actions que vous avez effectuées en faisant glisser et en supprimant des contrôles de la boîte à outils.

    Pour plus d’informations sur le concepteur Windows Forms dans Visual C# 2005, visitez le site web Microsoft Developer Network (MSDN) suivant :https://msdn.microsoft.com/en-us/library/ms173077.aspx

  9. Appuyez sur F5 pour exécuter le projet. Lorsque vous cliquez sur Parcourir, la boîte de dialogue Ouvrir s’affiche et vous permet d’accéder à un document Word, une feuille de calcul Excel ou une présentation PowerPoint. Sélectionnez n’importe quel fichier, puis cliquez sur Ouvrir. Le document s’ouvre à l’intérieur du contrôle WebBrowser et une boîte de message qui affiche le nom du serveur de documents Office s’affiche.

Éléments à prendre en compte lorsque vous utilisez le contrôle WebBrowser

Vous devez prendre en compte les éléments suivants lorsque vous utilisez le contrôle WebBrowser :

  • Le contrôle WebBrowser accède aux documents de façon asynchrone. Lorsque vous appelez WebBrowser1.Navigate, l’appel retourne le contrôle à votre application Visual C# avant le chargement complet du document. Si vous envisagez d’automatiser le document contenu, vous devez utiliser l’événement NavigateComplete2 pour être averti lorsque le chargement du document est terminé. Utilisez la propriété Document de l’objet WebBrowser transmis pour obtenir une référence à l’objet document Office, qui, dans le code précédent, est défini sur oDocument.

  • Le contrôle WebBrowser ne prend pas en charge la fusion de menus.

  • Dans Internet Explorer versions 5.0 et ultérieures, vous pouvez afficher les barres d’outils ancrées à l’aide du code suivant :

     // This is a toggle option, so call it once to show the 
     // toolbars and once to hide them. This works with Internet Explorer 5
     // but often fails to work properly with earlier versions.
    
    Object refmissing = System.Reflection.Missing.Value;
     axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,ref refmissing , ref refmissing);
    
  • Il existe plusieurs problèmes connus liés à l’utilisation de plusieurs contrôles WebBrowser dans un projet et au chargement de chaque contrôle avec le même type de document Office (autrement dit, tous les documents Word ou toutes les feuilles de calcul Excel). Microsoft vous recommande d’utiliser un seul contrôle pour chaque projet et d’accéder à un document à la fois.

    Le problème le plus courant concerne les barres de commandes Microsoft Office, qui semblent désactivées. Si vous avez deux contrôles WebBrowser sur le même formulaire, les deux étant chargés avec des documents Word, et si vous avez affiché des barres d’outils à l’aide de l’une des techniques précédentes, un seul ensemble de barres d’outils est actif et fonctionne correctement. L’autre est désactivée et ne peut pas être utilisée.

  • Pour effacer le contrôle WebBrowser de son contenu actuel, dans l’événement Click d’un autre bouton de commande (ou à un autre endroit approprié dans votre code), accédez à la page vide par défaut à l’aide du code suivant :

       AxWebBrowser1.Navigate("about:blank");
    

Éléments à prendre en compte lorsque vous utilisez le contrôle WebBrowser avec un programme Microsoft Office 2007

Par défaut, les programmes Office 2007 n’ouvrent pas de documents Office dans le navigateur web. Ce comportement affecte également le contrôle WebBrowser. Nous vous recommandons d’utiliser un conteneur de documents ActiveX personnalisé au lieu du contrôle WebBrowser lorsque vous développez des applications qui ouvrent des documents Office 2007.

Pour les applications existantes qui nécessitent une compatibilité descendante avec le contrôle WebBrowser, vous pouvez modifier le Registre pour configurer Internet Explorer. Vous pouvez utiliser cette méthode pour configurer Internet Explorer afin d’ouvrir des documents Office 2007 dans le navigateur Web. Pour plus d’informations, cliquez sur le numéro d’article suivant pour afficher l’article dans la Base de connaissances Microsoft :

927009 Une nouvelle fenêtre s’ouvre lorsque vous essayez d’afficher un document de programme Microsoft Office 2007 dans Windows Internet Explorer 7

Remarque

Si vous modifiez le Registre à l’aide de la méthode mentionnée dans l’article de la Base de connaissances Microsoft 927009, les modifications affectent le contrôle WebBrowser que vous utilisez dans l’application. Les modifications affectent également toutes les instances d’Internet Explorer. En outre, cette méthode peut ne pas fonctionner pour les versions ultérieures des suites Microsoft Office. Par conséquent, nous vous recommandons d’utiliser cette méthode uniquement pour la compatibilité avec une application existante.

References

Pour plus d’informations sur l’utilisation du contrôle WebBrowser, cliquez sur les numéros d’article suivants pour afficher les articles de la Base de connaissances Microsoft :

  • 304562 Visual Studio 2005 et Visual Studio .NET ne fournissent pas de contrôle de conteneur OLE pour Windows Forms

  • 243058 Comment utiliser le contrôle WebBrowser pour ouvrir un document Office

  • 927009 Une nouvelle fenêtre s’ouvre lorsque vous essayez d’afficher un document de programme Microsoft Office 2007 dans Windows Internet Explorer 7