Så här använder du WebBrowser-kontrollen i Visual Basic för att öppna ett Office-dokument

En Microsoft Visual C# 2005- och Microsoft Visual C# .NET-version av den här artikeln finns i 304662.

Sammanfattning

Du kanske vill visa eller bädda in ett Microsoft Office-dokument direkt i ett Microsoft Visual Basic-formulär. Microsoft Visual Basic 2005 och Visual Basic .NET tillhandahåller ingen OLE-kontroll som gör att du kan bädda in ett Office-dokument i ett formulär. Om du vill bädda in ett befintligt dokument och öppna det som ett ActiveX-dokumentobjekt på plats i ett Visual Basic-formulär är en möjlig lösning för dig att använda WebBrowser-kontrollen.

Den här artikeln visar hur du bläddrar till ett befintligt Office-dokument och visar det i ett Visual Basic-formulär med hjälp av WebBrowser-kontrollen.

Mer information

ActiveX-dokument är inbäddningsbara OLE-objekt som fungerar mer som ActiveX-kontroller än traditionella OLE-objekt. Till skillnad från ett traditionellt inbäddat objekt är ett ActiveX-dokument inte utformat för att vara ett inneslutet objekt i ett större dokument. I stället anses det i sig vara ett komplett dokument som bara visas (till exempel med Microsoft Internet Explorer) eller samlas in i en enda resurs med andra dokument (till exempel en Microsoft Office Binder-fil). Ett ActiveX-dokument som finns i WebBrowser-kontrollen är alltid aktivt. Till skillnad från traditionella OLE-inbäddade objekt finns det därför ingen känsla av aktivering på plats.

Microsoft Visual Basic .NET och Visual Basic 2005 stöder för närvarande inte direkt värdhantering av ActiveX-dokument, men du kan använda WebBrowser-kontrollen för detta ändamål. WebBrowser-kontrollen (Shdocvw.dll) är en del av Internet Explorer och kan endast användas på system som har Internet Explorer installerat.

Skapa ett Visual Basic-program som öppnar Office-dokument

Obs!

När du använder två metoder ovan för att skapa ett Visual Basic-program som öppnar Office-dokument måste du ändra koden i Visual Studio 2005. Som standard lägger Visual Basic till ett formulär i projektet när du skapar ett Windows Forms projekt. Formuläret heter Form1. De två filerna som representerar formuläret heter Form1.vb och Form1.designer.vb. Du skriver koden i Form1.vb. Filen Form1.designer.vb är den plats där Windows Forms Designer skriver koden som implementerar alla åtgärder som du utförde genom att dra och släppa kontroller från verktygslådan.

När Visual Basic-programmet har skapats trycker du på F5 för att köra projektet. När du klickar på Bläddra visas dialogrutan Öppna och du kan bläddra till en Word-, Excel- eller PowerPoint-fil. Markera en fil och klicka på Öppna. Dokumentet öppnas i WebBrowser-kontrollen och en meddelanderuta som visar namnet på Office-dokumentservern visas

Metod 1

  1. I Microsoft Visual Studio 2005 eller Microsoft Visual Studio .NET skapar du ett Windows-programprojekt med hjälp av Visual Basic 2005 eller Visual Basic .NET. Form1 skapas som standard.

  2. På menyn Verktyg klickar du på Anpassa verktygslåda för att öppna dialogrutan Anpassa verktygslåda . På fliken COM-komponenter lägger du till en referens till Microsoft WebBrowser. Klicka på OK för att lägga till WebBrowser-kontrollen i verktygslådan Windows Forms. WebBrowser-kontrollen visas med textutforskaren i verktygslådan.

    Observera I Visual Studio 2005 behöver du inte utföra steg 2.

  3. Med hjälp av verktygslådan lägger du till en WebBrowser-kontroll, en OpenFileDialog-kontroll och en knappkontroll i Form1. Det här steget lägger till medlemsvariabeln AxWebBrowser1, medlemsvariabeln OpenFileDialog1 och variabeln Button1 i klassen Form1.

  4. Definiera en privat medlem i klassen Form1 enligt följande.

    Dim oDocument as Object
    
  5. Klistra in följande kod i klassen 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
    

Metod 2

  1. I Microsoft Visual Studio 2005 eller Microsoft Visual Studio .NET skapar du ett Windows-programprojekt med hjälp av Visual Basic 2005 eller Visual Basic .NET. Form1 skapas som standard.

  2. I projektmenyn väljer du Komponenter för att öppna dialogrutan Komponenter. I dialogrutan Komponenter lägger du till referenser till Microsoft Common Dialog Control och Microsoft Internet Controls. Klicka på OK för att lägga till objekten i verktygslådan.

  3. Lägg till en instans av WebBrowser-kontrollen, CommonDialog-kontrollen och en CommandButton till Form1.

  4. Lägg sedan till följande kod i kodfönstret för 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
    

Att tänka på när du använder WebBrowser-kontrollen

Tänk på följande när du använder WebBrowser-kontrollen:

  • WebBrowser-kontrollen bläddrar till dokument asynkront. När du anropar WebBrowser1.Navigate returnerar anropet kontrollen till Visual Basic-programmet innan dokumentet har lästs in helt. Om du planerar att automatisera det inneslutna dokumentet måste du använda händelsen NavigateComplete2 för att meddelas när dokumentet har lästs in. Använd dokumentegenskapen för det WebBrowser-objekt som skickas för att hämta en referens till Office-dokumentobjektet, som i föregående kod är inställt på oDocument.

  • WebBrowser-kontrollen stöder inte sammanslagning av menyer.

  • WebBrowser-kontrollen döljer vanligtvis alla dockade verktygsfält innan du visar ett Office-dokument. Du kan använda Automation för att visa ett flytande verktygsfält med hjälp av kod, till exempel följande.

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

    Med nyare versioner av Internet Explorer (5.0 och senare) kan du också visa dockade verktygsfält med hjälp av följande kod.

    ' 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)
    
  • Det finns flera kända problem med att ha mer än en WebBrowser-kontroll i ett projekt och att ha varje kontroll inläst med samma typ av Office-dokument (dvs. alla Word-dokument eller alla Excel-kalkylblad). Vi rekommenderar att du bara använder en kontroll per projekt och bläddrar till ett dokument i taget.

    Det vanligaste problemet är med Office-kommandofält, som visas inaktiverade. Om du har två WebBrowser-kontroller i samma formulär, som båda läses in med Word-dokument, och du har visat verktygsfält med hjälp av någon av de föregående teknikerna, är endast en uppsättning verktygsfält aktiva och fungerar korrekt. Den andra är inaktiverad och kan inte användas.

  • Om du vill rensa WebBrowser från dess aktuella innehåll går du till klicka-händelsen för en annan kommandoknapp (eller på någon annan lämplig plats i koden) och bläddrar till den tomma standardsidan med hjälp av följande kod:

       AxWebBrowser1.Navigate("about:blank")
    

Att tänka på när du använder WebBrowser-kontrollen tillsammans med ett Microsoft Office-program från 2007

Som standard öppnar 2007 Office-programmen inte Office-dokument i webbläsaren. Det här beteendet påverkar även WebBrowser-kontrollen. Vi rekommenderar att du använder en anpassad ActiveX-dokumentcontainer i stället för WebBrowser-kontrollen när du utvecklar program som öppnar Office-dokument från 2007.

För befintliga program som kräver bakåtkompatibilitet med WebBrowser-kontrollen kan du ändra registret för att konfigurera Internet Explorer. Du kan använda den här metoden för att konfigurera Internet Explorer för att öppna 2007 Office-dokument i webbläsaren. Om du vill ha mer information klickar du på följande artikelnummer för att visa artikeln i Microsoft Knowledge Base:

927009 Ett nytt fönster öppnas när du försöker visa ett Microsoft Office-programdokument från 2007 i Windows Internet Explorer 7

Observera Om du ändrar registret med hjälp av den metod som nämns i knowledge base-artikeln 927009, påverkar ändringarna webbrowser-kontrollen som du använder i programmet. Ändringarna påverkar även alla instanser av Internet Explorer. Dessutom kanske den här metoden inte fungerar för framtida versioner av Microsoft Office-sviterna. Därför rekommenderar vi att du endast använder den här metoden för kompatibilitet med ett befintligt program.

Referenser

Om du vill ha mer information om hur du använder WebBrowser-kontrollen klickar du på följande artikelnummer för att visa artiklarna i Microsoft Knowledge Base:

304562 Visual Studio 2005 och Visual Studio .NET tillhandahåller inte någon OLE-containerkontroll för Windows Forms

927009 Ett nytt fönster öppnas när du försöker visa ett Microsoft Office-programdokument från 2007 i Windows Internet Explorer 7