Použití ovládacího prvku WebBrowser v jazyce Visual Basic k otevření dokumentu Office

Microsoft Visual C# 2005 a Microsoft Visual C# .NET verzi tohoto článku naleznete v 304662.

Souhrn

Dokument Microsoft Office můžete zobrazit nebo vložit přímo ve formuláři Microsoft Visual Basic. Microsoft Visual Basic 2005 a Visual Basic .NET neposkytují ovládací prvek OLE, který umožňuje vložit dokument Office do formuláře. Pokud chcete vložit existující dokument a otevřít ho jako objekt dokumentu ActiveX v rámci formuláře jazyka Visual Basic, potenciálním řešením je použít ovládací prvek WebBrowser.

Tento článek ukazuje, jak přejít na existující dokument Office a zobrazit jej ve formuláři jazyka Visual Basic pomocí ovládacího prvku WebBrowser.

Další informace

Dokumenty ActiveX jsou vložené objekty OLE, které se chovají spíše jako ovládací prvky ActiveX než tradiční objekty OLE. Na rozdíl od tradičního vloženého objektu není dokument ActiveX navržený tak, aby byl obsaženým objektem ve větším dokumentu. Místo toho se považuje za úplný dokument, který se jenom zobrazuje (například v Microsoft Internet Exploreru) nebo shromažďuje v jednom prostředku s jinými dokumenty (například se souborem Microsoft Office Binder). Dokument ActiveX hostovaný v ovládacím prvku WebBrowser je vždy aktivní; Proto na rozdíl od tradičních vložených objektů OLE neexistuje žádný smysl pro místní aktivaci.

I když Microsoft Visual Basic .NET a Visual Basic 2005 aktuálně nepodporují hostování dokumentů ActiveX přímo, můžete k tomuto účelu použít ovládací prvek WebBrowser. Ovládací prvek WebBrowser (Shdocvw.dll) je součástí aplikace Internet Explorer a lze jej použít pouze v systémech s nainstalovanou aplikací Internet Explorer.

Vytvoření aplikace Visual Basic, která otevře dokumenty Office

Poznámka

Pokud k vytvoření aplikace Visual Basic, která otevře dokumenty Office, použijete dvě výše uvedené metody, musíte změnit kód v sadě Visual Studio 2005. Visual Basic ve výchozím nastavení přidá jeden formulář do projektu při vytváření projektu model Windows Forms. Formulář má název Form1. Dva soubory, které představují formulář, mají název Form1.vb a Form1.designer.vb. Kód napíšete ve formátu Form1.vb. Soubor Form1.designer.vb je místo, kde návrhář model Windows Forms zapíše kód, který implementuje všechny akce, které jste provedli přetažením ovládacích prvků z panelu nástrojů.

Po vytvoření aplikace Visual Basic spusťte projekt stisknutím klávesy F5. Když kliknete na Procházet, zobrazí se dialogové okno Otevřít a umožní vám přejít k souboru Wordu, Excelu nebo PowerPointu. Vyberte libovolný soubor a klikněte na Otevřít. Dokument se otevře uvnitř ovládacího prvku WebBrowser a zobrazí se okno se zprávou zobrazující název serveru dokumentů Office.

Metoda 1

  1. V sadě Microsoft Visual Studio 2005 nebo Microsoft Visual Studio .NET vytvořte projekt aplikace systému Windows pomocí jazyka Visual Basic 2005 nebo Visual Basic .NET. Formulář1 je ve výchozím nastavení vytvořen.

  2. V nabídce Nástroje klepněte na tlačítko Přizpůsobit ToolBox otevřete dialogové okno Přizpůsobit ToolBox . Na kartě Komponenty modelu COM přidejte odkaz na Microsoft WebBrowser. Kliknutím na tlačítko OK přidejte ovládací prvek WebBrowser do sady nástrojů model Windows Forms. WebBrowser Ovládací prvek se zobrazí s průzkumníkem textu v panelu nástrojů.

    Poznámka V sadě Visual Studio 2005 nemusíte provádět krok 2.

  3. Pomocí panelu nástrojů přidejte ovládací prvek WebBrowser, ovládací prvek OpenFileDialog a ovládací prvek Button do formuláře Form1. Tento krok přidá AxWebBrowser1 členské proměnné, OpenFileDialog1 členské proměnné a Button1 členské proměnné Form1 třídy.

  4. Definujte privátní člen ve třídě Form1 následujícím způsobem.

    Dim oDocument as Object
    
  5. Do třídy Form1 vložte následující kód.

    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
    

Metoda 2

  1. V sadě Microsoft Visual Studio 2005 nebo Microsoft Visual Studio .NET vytvořte projekt aplikace systému Windows pomocí jazyka Visual Basic 2005 nebo Visual Basic .NET. Formulář1 je ve výchozím nastavení vytvořen.

  2. V nabídce Projekt vyberte Součásti a otevřete dialogové okno Součásti. V dialogovém okně Součásti přidejte odkazy na ovládací prvek Microsoft Common Dialog Control a ovládací prvky Microsoft Internet. Kliknutím na tlačítko OK přidejte položky do sady nástrojů.

  3. Přidejte instanci ovládacího prvku WebBrowser, ovládacího prvku CommonDialog a commandbutton do form1.

  4. V dalším kroku přidejte do okna Kódu pro Form1 následující kód:

    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
    

Důležité informace při použití ovládacího prvku WebBrowser

Při použití ovládacího prvku WebBrowser byste měli zvážit následující:

  • WebBrowser Ovládací prvek prochází dokumenty asynchronně. Při volání WebBrowser1.Navigate, volání vrátí řízení aplikace Visual Basic před dokument byl zcela načten. Pokud plánujete automatizovat obsažený dokument, musíte použít událost NavigateComplete2 k oznámení po dokončení načítání dokumentu. Použití Document vlastnost WebBrowser objekt, který je předán získat odkaz na objekt dokumentu Office, který v předchozím kódu je nastavena na oDocument.

  • Ovládací prvek WebBrowser nepodporuje slučování nabídek.

  • Ovládací prvek WebBrowser obecně skryje všechny ukotvené panely nástrojů před zobrazením dokumentu Office. Automatizaci můžete použít k zobrazení plovoucího panelu nástrojů pomocí kódu, jako je následující.

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

    Novější verze aplikace Internet Explorer (5.0 a novější) také umožňují zobrazit ukotvené panely nástrojů pomocí následujícího kódu.

    ' 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)
    
  • Existuje několik známých problémů s více než jedním ovládacím prvkem WebBrowser v projektu a načtením každého ovládacího prvku se stejným typem dokumentu Office (to znamená, že všechny wordové dokumenty nebo všechny excelové tabulky). Pro každý projekt se doporučuje používat jenom jeden ovládací prvek a procházet postupně jeden dokument.

    Nejběžnějším problémem jsou panely příkazů Office, které se zobrazují jako zakázané. Pokud máte ve stejném formuláři dva ovládací prvky WebBrowser, které jsou načteny do dokumentů aplikace Word a zobrazily se panely nástrojů pomocí jedné z předchozích technik, je aktivní pouze jedna sada panelů nástrojů a funguje správně. Druhý je zakázán a nelze jej použít.

  • Chcete-li vymazat WebBrowser jeho aktuální obsah, klepněte v události Click jiného příkazového tlačítka (nebo na jiném vhodném místě v kódu), přejděte na výchozí prázdnou stránku pomocí následujícího kódu:

       AxWebBrowser1.Navigate("about:blank")
    

Důležité informace při použití ovládacího prvku WebBrowser společně s aplikací systému Microsoft Office 2007

Ve výchozím nastavení aplikace Office 2007 neotevřou dokumenty Office ve webovém prohlížeči. Toto chování ovlivňuje také WebBrowser ovládacího prvku. Při vývoji aplikací, které otevírají dokumenty Office 2007, doporučujeme použít vlastní kontejner dokumentů ActiveX místo ovládacího prvku WebBrowser.

U stávajících aplikací, které vyžadují zpětnou kompatibilitu s ovládacím prvkem WebBrowser, můžete upravit registr tak, aby se nakonfiguruje aplikace Internet Explorer. Tuto metodu můžete použít ke konfiguraci aplikace Internet Explorer pro otevírání dokumentů systému Office 2007 ve webovém prohlížeči. Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

927009 Při pokusu o zobrazení dokumentu aplikace Microsoft Office 2007 v aplikaci Windows Internet Explorer 7 se otevře nové okno

Poznámka Pokud upravíte registr pomocí metody uvedené v článku znalostní báze Knowledge Base 927009, změny ovlivní ovládací prvek WebBrowser, který používáte v aplikaci. Změny mají vliv také na všechny instance aplikace Internet Explorer. Tato metoda navíc nemusí fungovat pro žádné budoucí verze sad Microsoft Office. Proto doporučujeme použít tuto metodu pouze pro kompatibilitu s existující aplikací.

Odkazy

Další informace o použití ovládacího prvku WebBrowser získáte v následujících článcích znalostní báze Microsoft Knowledge Base:

304562 Visual Studio 2005 a Visual Studio .NET neposkytují ovládací prvek kontejneru OLE pro model Windows Forms

927009 Při pokusu o zobrazení dokumentu aplikace Microsoft Office 2007 v aplikaci Windows Internet Explorer 7 se otevře nové okno