Comment utiliser le contrôle WebBrowser en Visual Basic pour ouvrir un document Office

Pour obtenir une version Microsoft Visual C# 2005 et Microsoft Visual C# .NET de cet article, consultez 304662.

Résumé

Vous pouvez afficher ou incorporer un document Microsoft Office directement dans un formulaire Microsoft Visual Basic. Microsoft Visual Basic 2005 et Visual Basic .NET ne fournissent pas de contrôle OLE qui vous permet d’incorporer un document Office dans 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 Basic, une solution potentielle consiste à utiliser le contrôle WebBrowser.

Cet article montre comment accéder à un document Office existant et l’afficher dans un formulaire Visual Basic à 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 Microsoft Visual Basic .NET et Visual Basic 2005 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 Basic qui ouvre des documents Office

Remarque

Lorsque vous utilisez deux méthodes ci-dessus pour créer une application Visual Basic qui ouvre des documents Office, vous devez modifier le code dans Visual Studio 2005. Par défaut, Visual Basic 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.vb et Form1.designer.vb. Vous écrivez le code dans Form1.vb. Le fichier Form1.designer.vb 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.

Une fois l’application Visual Basic créée, 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 fichier Word, Excel ou 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

Méthode 1

  1. Dans Microsoft Visual Studio 2005 ou dans Microsoft Visual Studio .NET, créez un projet d’application Windows à l’aide de Visual Basic 2005 ou Visual Basic .NET. Form1 est créé par défaut.

  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 Button à Form1. Cette étape ajoute la variable membre AxWebBrowser1, la variable membre OpenFileDialog1 et la variable membre Button1 à la classe Form1.

  4. Définissez un membre privé dans la classe Form1 comme suit.

    Dim oDocument as Object
    
  5. Collez le code suivant dans la classe Form1.

    Private Sub Button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles Button1.Click
    
    Dim strFileName As String
    
    'Find the Office document.
        With OpenFileDialog1
            .FileName = ""
            .ShowDialog()
            strFileName = .FileName
        End With
    
    'If the user does not cancel, open the document.
        If strFileName.Length Then
            oDocument = Nothing
            AxWebBrowser1.Navigate(strFileName)
        End If
    
    End Sub
    
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As _
       System.EventArgs) Handles MyBase.Load
    
    Button1.Text = "Browse"
    
    With OpenFileDialog1
            .Filter = "Office Documents " & _
            "(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt"
            .FilterIndex = 1
        End With
    
    End Sub
    
    Private Sub Form1_Closing(ByVal sender As Object, ByVal e As _
       System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    
    oDocument = Nothing
    
    End Sub
    
    Private Sub AxWebBrowser1_NavigateComplete2(ByVal sender As Object, _
       ByVal e As AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event) _
       Handles AxWebBrowser1.NavigateComplete2
    
    On Error Resume Next
    
    oDocument = e.pDisp.Document
    
    'Note: You can use the reference to the document object to
        '      automate the document server.
        MsgBox("File opened by: " & oDocument.Application.Name)
    
    End Sub
    

Méthode 2

  1. Dans Microsoft Visual Studio 2005 ou dans Microsoft Visual Studio .NET, créez un projet d’application Windows à l’aide de Visual Basic 2005 ou Visual Basic .NET. Form1 est créé par défaut.

  2. Dans le menu Projet, sélectionnez Composants pour ouvrir la boîte de dialogue Composants. Dans la boîte de dialogue Composants, ajoutez des références au contrôle de dialogue commun Microsoft et aux contrôles Microsoft Internet. Cliquez sur OK pour ajouter les éléments à la boîte à outils.

  3. Ajoutez une instance du contrôle WebBrowser, du contrôle CommonDialog et d’un CommandButton à Form1.

  4. Ensuite, ajoutez le code suivant dans la fenêtre Code pour Form1 :

    Option Explicit
    
    Dim oDocument As Object
    
    Private Sub Command1_Click()
       Dim sFileName As String
    
     ' Find an Office file...
       With CommonDialog1
          .FileName = ""
          .ShowOpen
          sFileName = .FileName
       End With
    
     ' If the user didn't cancel, open the file...
       If Len(sFileName) Then
          Set oDocument = Nothing
          WebBrowser1.Navigate sFileName
       End If
    End Sub
    
    Private Sub Form_Load()
       Command1.Caption = "Browse"
       ' For the 2007 Microsoft Office documents, change the .Filter parameter of the 
       ' With CommonDialog1 statement to:
       ' .Filter = "Office Documents " & _
       '      "(*.docx, *.xlsx, *.pptx)|*.docx;*.xlsx;*.pptx"
       With CommonDialog1
          .Filter = "Office Documents " & _
          "(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt"
          .FilterIndex = 1
          .Flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly
       End With
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
       Set oDocument = Nothing
    End Sub
    
    Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, _
    URL As Variant)
       On Error Resume Next
       Set oDocument = pDisp.Document
    
       MsgBox "File opened by: " & oDocument.Application.Name
    End Sub
    

Considérations relatives à l’utilisation du 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 renvoie le contrôle à votre application Visual Basic 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.

  • Le contrôle WebBrowser masque généralement toutes les barres d’outils ancrées avant d’afficher un document Office. Vous pouvez utiliser Automation pour afficher une barre d’outils flottante à l’aide de code tel que le suivant.

    With oDocument.Application.CommandBars("Standard")
       .Position = 4 '[msoBarFloating]
       .Visible = True
    End With
    
    

    Les versions plus récentes d’Internet Explorer (5.0 et versions ultérieures) vous permettent également d’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...
    AxWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER)
    
  • 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). Il est recommandé d’utiliser un seul contrôle par projet et d’accéder à un document à la fois.

    Le problème le plus courant concerne les barres de commandes 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 que 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 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")
    

Considérations relatives à l’utilisation du 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

Note Si vous modifiez le Registre à l’aide de la méthode mentionnée dans l’article de la Base de connaissances 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

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