Slik bruker du WebBrowser-kontrollen i Visual Basic til å åpne et Office-dokument

Hvis du vil ha en Microsoft Visual C# 2005- og Microsoft Visual C# .NET-versjon av denne artikkelen, kan du se 304662.

Sammendrag

Du vil kanskje vise eller bygge inn et Microsoft Office-dokument direkte i et Microsoft Visual Basic-skjema. Microsoft Visual Basic 2005 og Visual Basic .NET gir ikke en OLE-kontroll som lar deg bygge inn et Office-dokument i et skjema. Hvis du vil bygge inn et eksisterende dokument og åpne det som et activex-dokumentobjekt på stedet i et Visual Basic-skjema, er en potensiell løsning for deg å bruke WebBrowser-kontrollen.

Denne artikkelen demonstrerer hvordan du blar til et eksisterende Office-dokument og viser det i et Visual Basic-skjema ved hjelp av WebBrowser-kontrollen.

Mer informasjon

ActiveX-dokumenter er innebygde OLE-objekter som fungerer mer som ActiveX-kontroller enn tradisjonelle OLE-objekter. I motsetning til et tradisjonelt innebygd objekt, er ikke et ActiveX-dokument utformet for å være et inneholdt objekt i et større dokument. I stedet anses det i seg selv som et fullstendig dokument som bare vises (for eksempel med Microsoft Internet Explorer) eller samles inn i én enkelt ressurs med andre dokumenter (for eksempel en Microsoft Office Binder-fil). Et ActiveX-dokument som driftes i WebBrowser-kontrollen, er alltid aktivt. Derfor, i motsetning til tradisjonelle OLE-innebygde objekter, er det ingen følelse av aktivering på stedet.

Selv om Microsoft Visual Basic .NET og Visual Basic 2005 for øyeblikket ikke støtter drift av ActiveX-dokumenter direkte, kan du bruke WebBrowser-kontrollen til dette formålet. WebBrowser-kontrollen (Shdocvw.dll) er en del av Internet Explorer og kan bare brukes på systemer der Internet Explorer er installert.

Opprette et Visual Basic-program som åpner Office-dokumenter

Merk

Når du bruker to metoder ovenfor til å opprette et Visual Basic-program som åpner Office-dokumenter, må du endre koden i Visual Studio 2005. Visual Basic legger som standard til ett skjema i prosjektet når du oppretter et Windows Forms prosjekt. Skjemaet heter Form1. De to filene som representerer skjemaet, heter Form1.vb og Form1.designer.vb. Du skriver koden i Form1.vb. Form1.designer.vb-filen er der Windows Forms Designer skriver koden som implementerer alle handlingene du utførte, ved å dra og slippe kontroller fra verktøykassen.

Når Visual Basic-programmet er opprettet, trykker du F5 for å kjøre prosjektet. Når du klikker Bla gjennom, vises dialogboksen Åpne og lar deg bla til en Word-, Excel- eller PowerPoint-fil. Velg en fil, og klikk Åpne. Dokumentet åpnes i WebBrowser-kontrollen, og en meldingsboks som viser navnet på Office-dokumentserveren, vises

Metode 1

  1. I Microsoft Visual Studio 2005 eller Microsoft Visual Studio .NET kan du opprette et Windows-programprosjekt ved hjelp av Visual Basic 2005 eller Visual Basic .NET. Skjema1 er opprettet som standard.

  2. Klikk Tilpass verktøykasseVerktøy-menyen for å åpne dialogboksen Tilpass verktøykasse. Legg til en referanse i Microsoft WebBrowserCOM-komponenter-fanen. Klikk OK for å legge til WebBrowser-kontrollen i Windows Forms verktøykassen. WebBrowser-kontrollen vises med tekstutforskeren i verktøykassen.

    Merk I Visual Studio 2005 trenger du ikke å utføre trinn 2.

  3. Bruk verktøykassen til å legge til en WebBrowser-kontroll, en OpenFileDialog-kontroll og en knappkontroll i Form1. Dette trinnet legger til medlemsvariabelen AxWebBrowser1, medlemsvariabelen OpenFileDialog1 og button1-medlemsvariabelen i Form1-klassen.

  4. Definer et privat medlem i Skjema1-klassen som følger.

    Dim oDocument as Object
    
  5. Lim inn følgende kode i Form1-klassen.

    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
    

Metode 2

  1. I Microsoft Visual Studio 2005 eller Microsoft Visual Studio .NET kan du opprette et Windows-programprosjekt ved hjelp av Visual Basic 2005 eller Visual Basic .NET. Skjema1 er opprettet som standard.

  2. Velg Komponenter på Prosjekt-menyen for å åpne dialogboksen Komponenter. Legg til referanser i Microsoft Common Dialog Control og Microsoft Internet Controls i dialogboksen Komponenter. Klikk OK for å legge til elementene i verktøykassen.

  3. Legg til en forekomst av WebBrowser-kontrollen, CommonDialog-kontrollen og en CommandButton i Form1.

  4. Deretter legger du til følgende kode i kodevinduet for Skjema1:

    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
    

Vurderinger når du bruker WebBrowser-kontrollen

Du bør vurdere følgende når du bruker WebBrowser-kontrollen:

  • WebBrowser-kontrollen blar til dokumenter asynkront. Når du ringer WebBrowser1.Navigate, returnerer kallet kontrollen til Visual Basic-programmet før dokumentet er fullstendig lastet inn. Hvis du planlegger å automatisere dokumentet, må du bruke NavigateComplete2-hendelsen til å bli varslet når dokumentet er ferdig lastet inn. Bruk dokumentegenskapen for WebBrowser-objektet som sendes inn for å få en referanse til Office-dokumentobjektet, som i den forrige koden er satt til oDocument.

  • WebBrowser-kontrollen støtter ikke sammenslåing av menyer.

  • WebBrowser-kontrollen skjuler vanligvis alle forankrede verktøylinjer før du viser et Office-dokument. Du kan bruke automatisering til å vise en flytende verktøylinje ved hjelp av kode, for eksempel følgende.

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

    Nyere versjoner av Internet Explorer (5.0 og nyere) lar deg også vise forankrede verktøylinjer ved hjelp av følgende kode.

    ' 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 finnes flere kjente problemer med å ha mer enn én WebBrowser-kontroll i et prosjekt, og at hver kontroll lastes inn med samme type Office-dokument (det vil eksempelvis alle Word-dokumenter eller alle Excel-regneark). Det anbefales at du bare bruker én kontroll per prosjekt, og blar til ett dokument om gangen.

    Det vanligste problemet er med kommandolinjene i Office, som ser ut til å være deaktivert. Hvis du har to WebBrowser-kontroller i samme skjema, som begge er lastet inn med Word-dokumenter, og du har vist verktøylinjer ved hjelp av én av de foregående teknikkene, er bare ett sett med verktøylinjer aktive og fungerer som de skal. Den andre er deaktivert og kan ikke brukes.

  • Hvis du vil fjerne WebBrowser for gjeldende innhold, blar du til standard tom side ved hjelp av følgende kode i Klikk-hendelsen for en annen kommandoknapp (eller på et annet passende sted i koden):

       AxWebBrowser1.Navigate("about:blank")
    

Viktige faktorer når du bruker WebBrowser-kontrollen sammen med et 2007 Microsoft Office-program

Office-programmene i 2007 åpner som standard ikke Office-dokumenter i nettleseren. Denne virkemåten påvirker også WebBrowser-kontrollen. Vi anbefalte at du bruker en egendefinert ActiveX-dokumentbeholder i stedet for WebBrowser-kontrollen når du utvikler programmer som åpner 2007 Office-dokumenter.

For eksisterende programmer som krever bakoverkompatibilitet med WebBrowser-kontrollen, kan du endre registeret for å konfigurere Internet Explorer. Du kan bruke denne metoden til å konfigurere Internet Explorer til å åpne 2007 Office-dokumenter i nettleseren. Hvis du vil ha mer informasjon, klikker du følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

927009 Et nytt vindu åpnes når du prøver å vise et 2007 Microsoft Office-programdokument i Windows Internet Explorer 7

Merk Hvis du endrer registeret ved hjelp av metoden som nevnes i 927009 i Knowledge Base-artikkelen, påvirker endringene WebBrowser-kontrollen du bruker i programmet. Endringene påvirker også alle forekomster av Internet Explorer. I tillegg kan det hende at denne metoden ikke fungerer for fremtidige versjoner av Microsoft Office-programseriene. Derfor anbefaler vi at du bare bruker denne metoden for kompatibilitet med et eksisterende program.

Referanser

Hvis du vil ha mer informasjon om hvordan du bruker WebBrowser-kontrollen, klikker du følgende artikkelnumre for å vise artiklene i Microsoft Knowledge Base:

304562 Visual Studio 2005 og Visual Studio .NET gir ikke en OLE-beholderkontroll for Windows Forms

927009 Et nytt vindu åpnes når du prøver å vise et 2007 Microsoft Office-programdokument i Windows Internet Explorer 7