Sådan benyttes WebBrowser-kontrolelementet til at åbne et Office-dokument

Sammenfatning

Når du arbejder med Office-dokumenter, vil du måske have vist dokumenterne direkte i Visual Basic, men ikke oprette et integreret OLE-objekt ved hjælp af OLE-beholderkontrolelementet. I stedet vil du sammenkæde med et eksisterende dokument og åbne det som et lokalt ActiveX-dokumentobjekt. Heldigvis tilbyder Microsoft WebBrowser-kontrolelementet en løsning.

I denne artikel demonstreres, hvordan du navigerer til et eksisterende Office-dokument og viser det i Visual Basic ved hjælp af WebBrowser-kontrolelementet.

Yderligere Information

ActiveX-dokumenter er integrerede OLE-objekter, der opfører sig mere som ActiveX-objekter end traditionelle OLE-objekter. I modsætning til et normalt, integreret objekt er et ActiveX-dokument ikke udviklet til at være et objekt, der udgør en del af et større dokument. I stedet anses det for at være et komplet dokument i sig selv, der blot vises ved hjælp af en fremviser (f.eks. Internet Explorer), eller der indsamles i en enkelt ressource sammen med andre dokumenter (f.eks. en projektmappefil).

Selvom Microsoft Visual Basic i øjeblikket ikke understøtter muligheden for at være vært for ActiveX-dokumenter direkte, kan du omgå denne begrænsning ved at bruge egenskaberne i Internet Explorer og programmets WebBrowser-kontrolelement. WebBrowser-kontrolelementet (Shdocvw.dll) er en del af Internet Explorer og kan kun bruges på systemer, hvor Internet Explorer er installeret.

Oprettelse af et Visual Basic-program, der åbner Office-dokumenter

Følg nedenstående trin for at oprette et Visual Basic-program, der åbner Office-dokumenter:
  1. Start Visual Basic, og opret et nyt standardprojekt. Form1 oprettes som standard.
  2. Vælg Komponenter i menuen Projekt for at åbne dialogboksen Komponenter. Føj referencer til Microsoft CommonDialog-kontrolelementet og Microsofts internetkontrolelementer i dialogboksen Komponenter. Klik på OK for at føje elementerne til værktøjskassen.
  3. Føj en forekomst af WebBrowser-kontrolelementet, CommonDialog-kontrolelementet og CommandButton til Form1.
  4. Føj dernæst følgende kode til kodevinduet for 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"
    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
  5. Tryk på F5 for at køre projektet. Når du vælger knappen Gennemse , vises dialogboksen Åbn, hvor du kan navigere til en Word-, Excel- eller PowerPoint-fil. Vælg Åbn for at åbne dokumentet i WebBrowser-kontrolelementet. Der vises derefter en meddelelse, hvor navnet på det Office-program, der åbnede filen, er angivet.

Overvejelser i forbindelse med brug af WebBrowser-kontrolelementet

Overvej følgende, når du bruger WebBrowser-kontrolelementet:
  • WebBrowser-kontrolelementet navigerer asynkront til dokumenter. Det betyder, at når du kalder WebBrowser1.Navigate, returnerer kaldet kontrollen til Visual Basic-programmet, inden dokumentet er fuldstændigt indlæst. Hvis du planlægger at automatisere dokumentet, skal du bruge hændelsen NavigateComplete2 for at få at oplyst, hvornår indlæsningen af dokumentet er fuldført. Brug det sendte WebBrowser-objekts dokumentegenskab for at oprette en reference til Office-dokumentobjektet, som i den foregående kode er angivet til oDocument.
  • WebBrowser-kontrolelementet understøtter ikke menufletning. Hvis dokumentets menupunkter skal vises sammen med Visual Basic-menuen, skal du i stedet bruge OLE-beholderkontrolelementet.
  • WebBrowser-kontrolelementet skjuler generelt forankrede værktøjslinjer, før et Office-dokument vises. Du kan bruge automatiseringsfunktionen til at få vist en flydende værktøjslinje ved hjælp af kode som vist nedenfor:
       With oDocument.Application.CommandBars("Standard")
    .Position = 4 '[msoBarFloating]
    .Visible = True
    End With
    I nyere versioner af Internet Explorer (5.0 og nyere) kan du også få vist forankrede værktøjslinjer ved hjælp af 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...
    WebBrowser1.ExecWB OLECMDID_HIDETOOLBARS, OLECMDEXECOPT_DONTPROMPTUSER
  • Der er flere velkendte problemer forbundet med at have mere end ét WebBrowser-kontrolelement i et projekt, og med at der i de enkelte kontrolelementer er indlæst den samme type Office-dokument (dvs. udelukkende Word-dokumenter eller udelukkende Excel-regneark). Det anbefales, at du kun kan bruger ét kontrolelement pr. projekt og kun navigerer til ét dokument ad gangen.

    Det mest almindelig problem opstår i forbindelse med Office-kommandolinjer, der virker til at være deaktiveret. Hvis du har to WebBrowser-kontrolelementer på den samme formular, der begge indeholder Word-dokumenter, og du har fået vist værktøjslinjer ved hjælp af en af de foregående teknikker, er det kun det ene sæt værktøjslinjer, der er aktivt og fungerer korrekt. Det andet sæt er deaktiveret og kan ikke benyttes.
  • Hvis du vil fjerne WebBrowser-kontrolelementets nuværende indhold, skal du i en anden kommandoknaps klikhændelse (eller et andet passende sted i koden) navigere til den tomme standardside ved hjælp af denne kode:
       WebBrowser1.Navigate "about:blank"

Referencer

Yderligere oplysninger om WebBrowser-kontrolelementet i Visual Basic finder du ved at klikke på nedenstående artikelnumre for at få vist artiklerne i Microsoft Knowledge Base:

162719 Sådan bruges WebBrowser-kontrolelementet fra Visual Basic 5.0 (artiklen er evt. på engelsk)

188271 Sådan udskrives WebBrowser-kontrolelementets indhold fra VB (artiklen er evt. på engelsk)

191692 PRB: Shdocvw.dll er ikke inkluderet i PDW-installationspakken (artiklen er evt. på engelsk)

238313 PRB: Oprettelse af adgang til Internet Explorer DOM (Document Object Model) fra Visual Basic (artiklen er evt. på engelsk)

Egenskaber

Artikel-id: 243058 – Seneste udgave 30. mar. 2006 – Udgave 1

Feedback