Verwenden des WebBrowser-Steuerelements in Visual Basic zum Öffnen eines Office-Dokuments

Eine Version von Microsoft Visual C# 2005 und Microsoft Visual C# .NET finden Sie unter 304662.

Zusammenfassung

Möglicherweise möchten Sie ein Microsoft Office-Dokument direkt in einem Microsoft Visual Basic-Formular anzeigen oder einbetten. Microsoft Visual Basic 2005 und Visual Basic .NET bieten kein OLE-Steuerelement, mit dem Sie ein Office-Dokument in ein Formular einbetten können. Wenn Sie ein vorhandenes Dokument einbetten und als direktes ActiveX-Dokumentobjekt in einem Visual Basic-Formular öffnen möchten, können Sie das WebBrowser-Steuerelement verwenden.

In diesem Artikel wird veranschaulicht, wie Sie zu einem vorhandenen Office-Dokument navigieren und es mithilfe des WebBrowser-Steuerelements in einem Visual Basic-Formular anzeigen.

Weitere Informationen

ActiveX-Dokumente sind einbettbare OLE-Objekte, die sich eher wie ActiveX-Steuerelemente als herkömmliche OLE-Objekte verhalten. Im Gegensatz zu einem herkömmlichen eingebetteten Objekt ist ein ActiveX-Dokument nicht als enthaltenes Objekt in einem größeren Dokument konzipiert. Stattdessen wird es als vollständiges Dokument betrachtet, das lediglich angezeigt wird (z. B. mit Microsoft Internet Explorer) oder in einer einzigen Ressource mit anderen Dokumenten (z. B. einer Microsoft Office-Ordnerdatei) gesammelt wird. Ein ActiveX-Dokument, das im WebBrowser-Steuerelement gehostet wird, ist immer aktiv. Daher gibt es im Gegensatz zu herkömmlichen eingebetteten OLE-Objekten keinen Sinn für eine direkte Aktivierung.

Obwohl Microsoft Visual Basic .NET und Visual Basic 2005 derzeit das direkte Hosten von ActiveX-Dokumenten nicht unterstützen, können Sie das WebBrowser-Steuerelement für diesen Zweck verwenden. Das WebBrowser-Steuerelement (Shdocvw.dll) ist Teil von Internet Explorer und kann nur auf Systemen verwendet werden, auf denen Internet Explorer installiert ist.

Erstellen einer Visual Basic-Anwendung, die Office-Dokumente öffnet

Hinweis

Wenn Sie oben zwei Methoden zum Erstellen einer Visual Basic-Anwendung verwenden, die Office-Dokumente öffnet, müssen Sie den Code in Visual Studio 2005 ändern. Standardmäßig fügt Visual Basic dem Projekt ein Formular hinzu, wenn Sie ein Windows Forms Projekt erstellen. Das Formular heißt "Form1". Die beiden Dateien, die das Formular darstellen, heißen "Form1.vb" und "Form1.designer.vb". Sie schreiben den Code in Form1.vb. In der Datei "Form1.designer.vb" schreibt der Windows Forms Designer den Code, der alle Aktionen implementiert, die Sie durch Ziehen und Ablegen von Steuerelementen aus der Toolbox ausgeführt haben.

Nachdem die Visual Basic-Anwendung erstellt wurde, drücken Sie F5, um das Projekt auszuführen. Wenn Sie auf "Durchsuchen" klicken, wird das Dialogfeld " Öffnen " angezeigt, in dem Sie zu einer Word-, Excel- oder PowerPoint-Datei navigieren können. Wählen Sie eine beliebige Datei aus, und klicken Sie auf "Öffnen". Das Dokument wird im WebBrowser-Steuerelement geöffnet, und es wird ein Meldungsfeld angezeigt, in dem der Name des Office-Dokumentservers angezeigt wird.

Methode 1

  1. Erstellen Sie in Microsoft Visual Studio 2005 oder in Microsoft Visual Studio .NET ein Windows-Anwendungsprojekt mit Visual Basic 2005 oder Visual Basic .NET. Form1 wird standardmäßig erstellt.

  2. Klicken Sie im Menü "Extras " auf " ToolBox anpassen ", um das Dialogfeld " ToolBox anpassen " zu öffnen. Fügen Sie auf der Registerkarte "COM-Komponenten " einen Verweis auf den Microsoft WebBrowser hinzu. Klicken Sie auf "OK", um das WebBrowser-Steuerelement zur Windows Forms Toolbox hinzuzufügen. Das WebBrowser-Steuerelement wird zusammen mit dem Text-Explorer in der Toolbox angezeigt.

    Hinweis In Visual Studio 2005 müssen Sie Schritt 2 nicht ausführen.

  3. Fügen Sie mithilfe der Toolbox ein WebBrowser-Steuerelement, ein OpenFileDialog-Steuerelement und ein Schaltflächen-Steuerelement zu Form1 hinzu. In diesem Schritt werden der Form1-Klasse die AxWebBrowser1-Membervariable, die OpenFileDialog1-Membervariable und die Button1-Membervariable hinzugefügt.

  4. Definieren Sie ein privates Element in der Form1-Klasse wie folgt.

    Dim oDocument as Object
    
  5. Fügen Sie den folgenden Code in die Form1-Klasse ein.

    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
    

Methode 2

  1. Erstellen Sie in Microsoft Visual Studio 2005 oder in Microsoft Visual Studio .NET ein Windows-Anwendungsprojekt mit Visual Basic 2005 oder Visual Basic .NET. Form1 wird standardmäßig erstellt.

  2. Wählen Sie im Menü "Projekt" die Option "Komponenten" aus, um das Dialogfeld "Komponenten" zu öffnen. Fügen Sie im Dialogfeld "Komponenten" Verweise auf das allgemeine Microsoft-Dialogfeld-Steuerelement und die Microsoft-Internetsteuerelemente hinzu. Klicken Sie auf "OK", um die Elemente zur Toolbox hinzuzufügen.

  3. Fügen Sie form1 eine Instanz des WebBrowser-Steuerelements, des CommonDialog-Steuerelements und eines CommandButton-Steuerelements hinzu.

  4. Fügen Sie als Nächstes den folgenden Code in das Codefenster für Form1 ein:

    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
    

Überlegungen bei der Verwendung des WebBrowser-Steuerelements

Bei Verwendung des WebBrowser-Steuerelements sollten Sie Folgendes berücksichtigen:

  • Das WebBrowser-Steuerelement navigiert asynchron zu Dokumenten. Wenn Sie WebBrowser1.Navigate aufrufen, gibt der Aufruf die Steuerung an Ihre Visual Basic-Anwendung zurück, bevor das Dokument vollständig geladen wurde. Wenn Sie das enthaltene Dokument automatisieren möchten, müssen Sie das NavigateComplete2-Ereignis verwenden, um benachrichtigt zu werden, wenn das Laden des Dokuments abgeschlossen ist. Verwenden Sie die Document-Eigenschaft des übergebenen WebBrowser-Objekts, um einen Verweis auf das Office-Dokumentobjekt abzurufen, das im vorherigen Code auf oDocument festgelegt ist.

  • Das WebBrowser-Steuerelement unterstützt das Zusammenführen von Menüs nicht.

  • Das WebBrowser-Steuerelement blendet im Allgemeinen alle angedockten Symbolleisten aus, bevor ein Office-Dokument angezeigt wird. Mithilfe der Automatisierung können Sie eine unverankerte Symbolleiste mithilfe von Code wie dem folgenden anzeigen.

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

    Mit neueren Versionen von Internet Explorer (5.0 und höher) können Sie auch angedockte Symbolleisten mit dem folgenden Code anzeigen.

    ' 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)
    
  • Es gibt mehrere bekannte Probleme mit mehr als einem WebBrowser-Steuerelement in einem Projekt und dem Laden jedes Steuerelements mit demselben Office-Dokumenttyp (d. a. alle Word-Dokumente oder alle Excel-Tabellen). Es wird empfohlen, nur ein Steuerelement pro Projekt zu verwenden und zu jeweils einem Dokument zu navigieren.

    Das häufigste Problem sind office-Befehlsleisten, die deaktiviert angezeigt werden. Wenn Sie über zwei WebBrowser-Steuerelemente im selben Formular verfügen, die beide mit Word-Dokumenten geladen werden, und Sie Symbolleisten mithilfe einer der oben genannten Techniken angezeigt haben, ist nur eine Gruppe von Symbolleisten aktiv und funktioniert ordnungsgemäß. Der andere ist deaktiviert und kann nicht verwendet werden.

  • Um den WebBrowser des aktuellen Inhalts zu löschen, navigieren Sie im Click-Ereignis einer anderen Befehlsschaltfläche (oder an einer anderen geeigneten Stelle im Code) mithilfe des folgenden Codes zur leeren Standardseite:

       AxWebBrowser1.Navigate("about:blank")
    

Überlegungen bei der Verwendung des WebBrowser-Steuerelements zusammen mit einem 2007 Microsoft Office-Programm

Standardmäßig öffnen die 2007 Office-Programme keine Office-Dokumente im Webbrowser. Dieses Verhalten wirkt sich auch auf das WebBrowser-Steuerelement aus. Es wird empfohlen, beim Entwickeln von Anwendungen, die 2007 Office-Dokumente öffnen, einen benutzerdefinierten ActiveX-Dokumentcontainer anstelle des WebBrowser-Steuerelements zu verwenden.

Bei vorhandenen Anwendungen, die Abwärtskompatibilität mit dem WebBrowser-Steuerelement erfordern, können Sie die Registrierung ändern, um Internet Explorer zu konfigurieren. Sie können diese Methode verwenden, um Internet Explorer so zu konfigurieren, dass 2007 Office-Dokumente im Webbrowser geöffnet werden. Klicken Sie für weitere Informationen auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:

927009 Ein neues Fenster wird geöffnet, wenn Sie versuchen, ein Microsoft Office-Programmdokument 2007 in Windows Internet Explorer 7 anzuzeigen.

Hinweis Wenn Sie die Registrierung mithilfe der im Knowledge Base-Artikel 927009 erwähnten Methode ändern, wirken sich die Änderungen auf das WebBrowser-Steuerelement aus, das Sie in der Anwendung verwenden. Die Änderungen wirken sich auch auf alle Instanzen von Internet Explorer aus. Darüber hinaus funktioniert diese Methode möglicherweise nicht für zukünftige Versionen der Microsoft Office-Suites. Daher wird empfohlen, diese Methode nur zur Kompatibilität mit einer vorhandenen Anwendung zu verwenden.

References

Weitere Informationen zur Verwendung des WebBrowser-Steuerelements finden Sie in den folgenden Artikelnummern, um die Artikel in der Microsoft Knowledge Base anzuzeigen:

304562 Visual Studio 2005 und Visual Studio .NET bieten kein OLE-Containersteuerelement für Windows Forms

927009 Ein neues Fenster wird geöffnet, wenn Sie versuchen, ein Microsoft Office-Programmdokument 2007 in Windows Internet Explorer 7 anzuzeigen.