Jak otworzyć dokument pakietu Office za pomocą kontrolki WebBrowser w języku Visual Basic

Aby zapoznać się z wersją programu Microsoft Visual C# 2005 i microsoft Visual C# dla platformy .NET tego artykułu, zobacz 304662.

Podsumowanie

Możesz wyświetlić lub osadzić dokument pakietu Microsoft Office bezpośrednio w formularzu programu Microsoft Visual Basic. Microsoft Visual Basic 2005 i Visual Basic .NET nie udostępniają kontrolki OLE, która umożliwia osadzanie dokumentu pakietu Office w formularzu. Jeśli chcesz osadzić istniejący dokument i otworzyć go jako obiekt dokumentu ActiveX w miejscu w formularzu Visual Basic, potencjalnym rozwiązaniem jest użycie kontrolki WebBrowser.

W tym artykule pokazano, jak przejść do istniejącego dokumentu pakietu Office i wyświetlić go w formularzu Visual Basic przy użyciu kontrolki WebBrowser.

Więcej informacji

Dokumenty ActiveX są osadzanymi obiektami OLE, które zachowują się bardziej jak kontrolki ActiveX niż tradycyjne obiekty OLE. W przeciwieństwie do tradycyjnego obiektu osadzonego dokument ActiveX nie jest przeznaczony jako obiekt zawarty w większym dokumencie. Zamiast tego jest on traktowany jako kompletny dokument, który jest tylko wyświetlany (na przykład w programie Microsoft Internet Explorer) lub zbierany w jednym zasobie z innymi dokumentami (takimi jak plik binder pakietu Microsoft Office). Dokument ActiveX hostowany w kontrolce WebBrowser jest zawsze aktywny; W związku z tym, w przeciwieństwie do tradycyjnych obiektów osadzonych OLE, nie ma poczucia aktywacji w miejscu.

Chociaż platformy .NET i Visual Basic 2005 w programie Microsoft Visual Basic 2005 nie obsługują obecnie bezpośredniego hostowania dokumentów ActiveX, do tego celu można użyć kontrolki WebBrowser. Kontrolka WebBrowser (Shdocvw.dll) jest częścią programu Internet Explorer i może być używana tylko w systemach z zainstalowanym programem Internet Explorer.

Tworzenie aplikacji Visual Basic, która otwiera dokumenty pakietu Office

Uwaga

W przypadku użycia dwóch powyższych metod do utworzenia aplikacji Visual Basic, która otwiera dokumenty pakietu Office, należy zmienić kod w programie Visual Studio 2005. Domyślnie program Visual Basic dodaje jeden formularz do projektu podczas tworzenia projektu Windows Forms. Formularz nosi nazwę Form1. Dwa pliki reprezentujące formularz mają nazwy Form1.vb i Form1.designer.vb. Kod jest pisany w formacie Form1.vb. Plik Form1.designer.vb to miejsce, w którym projektant Windows Forms zapisuje kod, który implementuje wszystkie akcje wykonywane przez przeciąganie i usuwanie kontrolek z przybornika.

Po utworzeniu aplikacji Visual Basic naciśnij klawisz F5, aby uruchomić projekt. Po kliknięciu przycisku Przeglądaj zostanie wyświetlone okno dialogowe Otwieranie , które umożliwia przejście do pliku programu Word, Excel lub PowerPoint. Wybierz dowolny plik i kliknij przycisk Otwórz. Dokument zostanie otwarty wewnątrz kontrolki WebBrowser, a zostanie wyświetlone pole komunikatu z nazwą serwera dokumentów pakietu Office

Metoda 1

  1. W programie Microsoft Visual Studio 2005 lub Microsoft Visual Studio .NET utwórz projekt aplikacji systemu Windows przy użyciu programu Visual Basic 2005 lub Visual Basic .NET. Formularz 1 jest tworzony domyślnie.

  2. W menu Narzędzia kliknij pozycję Dostosuj przybornik , aby otworzyć okno dialogowe Dostosowywanie przybornika . Na karcie Składniki COM dodaj odwołanie do programu Microsoft WebBrowser. Kliknij przycisk OK, aby dodać kontrolkę WebBrowser do przybornika Windows Forms. Kontrolka WebBrowser zostanie wyświetlona z tekstem Eksplorator w przyborniku.

    Uwaga W programie Visual Studio 2005 nie trzeba wykonywać kroku 2.

  3. Przy użyciu przybornika dodaj kontrolkę WebBrowser, kontrolkę OpenFileDialog i kontrolkę Przycisk do formantu Form1. Ten krok dodaje zmienną składową AxWebBrowser1, zmienną składową OpenFileDialog1 i zmienną składową Button1 do klasy Form1.

  4. Zdefiniuj prywatny element członkowski w klasie Form1 w następujący sposób.

    Dim oDocument as Object
    
  5. Wklej następujący kod w klasie 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
    

Metoda 2

  1. W programie Microsoft Visual Studio 2005 lub Microsoft Visual Studio .NET utwórz projekt aplikacji systemu Windows przy użyciu programu Visual Basic 2005 lub Visual Basic .NET. Formularz 1 jest tworzony domyślnie.

  2. Z menu Projekt wybierz pozycję Składniki, aby otworzyć okno dialogowe Składniki. W oknie dialogowym Składniki dodaj odwołania do kontrolki Microsoft Common Dialog Control i kontrolek internetowych firmy Microsoft. Kliknij przycisk OK, aby dodać elementy do przybornika.

  3. Dodaj wystąpienie kontrolki WebBrowser, kontrolki CommonDialog i przycisku polecenia do formularza Form1.

  4. Następnie dodaj następujący kod do okna Kod formularza 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
    

Zagadnienia dotyczące korzystania z kontrolki WebBrowser

Podczas korzystania z kontrolki WebBrowser należy wziąć pod uwagę następujące kwestie:

  • Kontrolka WebBrowser asynchronicznie przegląda dokumenty. Wywołanie elementu WebBrowser1.Navigate powoduje zwrócenie kontrolki do aplikacji Visual Basic przed całkowitym załadowaniem dokumentu. Jeśli planujesz zautomatyzować zawarty dokument, musisz użyć zdarzenia NavigateComplete2, aby otrzymać powiadomienie po zakończeniu ładowania dokumentu. Użyj właściwości Document obiektu WebBrowser, który jest przekazywany, aby uzyskać odwołanie do obiektu dokumentu pakietu Office, który w poprzednim kodzie jest ustawiony na wartość oDocument.

  • Kontrolka WebBrowser nie obsługuje scalania menu.

  • Kontrolka WebBrowser zwykle ukrywa wszystkie zadokowane paski narzędzi przed wyświetleniem dokumentu pakietu Office. Możesz użyć usługi Automation, aby wyświetlić pływający pasek narzędzi przy użyciu kodu, takiego jak poniższy.

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

    Nowsze wersje programu Internet Explorer (5.0 i nowsze) umożliwiają również wyświetlanie zadokowanych pasków narzędzi przy użyciu następującego kodu.

    ' 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)
    
  • Istnieje kilka znanych problemów z posiadaniem więcej niż jednej kontrolki WebBrowser w projekcie i załadowaniem każdej kontrolki z tym samym typem dokumentu pakietu Office (czyli wszystkimi dokumentami programu Word lub wszystkimi arkuszami kalkulacyjnymi programu Excel). Zaleca się używanie tylko jednej kontrolki na projekt i przechodzenie do jednego dokumentu naraz.

    Najczęstszym problemem są paski poleceń pakietu Office, które są wyświetlane jako wyłączone. Jeśli masz dwie kontrolki WebBrowser w tym samym formularzu, z których oba są ładowane z dokumentami programu Word, a paski narzędzi zostały wyświetlone przy użyciu jednej z poprzednich technik, tylko jeden zestaw pasków narzędzi jest aktywny i działa poprawnie. Drugi jest wyłączony i nie może być używany.

  • Aby wyczyścić webbrowser jego bieżącej zawartości, w przypadku kliknięcia innego przycisku polecenia (lub w innym odpowiednim miejscu w kodzie), przejdź do domyślnej pustej strony przy użyciu następującego kodu:

       AxWebBrowser1.Navigate("about:blank")
    

Zagadnienia dotyczące używania kontrolki WebBrowser wraz z programem pakietu Microsoft Office 2007

Domyślnie programy pakietu Office 2007 nie otwierają dokumentów pakietu Office w przeglądarce sieci Web. To zachowanie ma również wpływ na kontrolkę WebBrowser. Zalecamy użycie niestandardowego kontenera dokumentów ActiveX zamiast kontrolki WebBrowser podczas tworzenia aplikacji, które otwierają dokumenty pakietu Office 2007.

W przypadku istniejących aplikacji, które wymagają zgodności z poprzednimi wersjami kontrolki WebBrowser, można zmodyfikować rejestr w celu skonfigurowania programu Internet Explorer. Ta metoda umożliwia skonfigurowanie programu Internet Explorer do otwierania dokumentów pakietu Office 2007 w przeglądarce sieci Web. Aby uzyskać więcej informacji, kliknij następujący numer artykułu, aby wyświetlić artykuł w bazie wiedzy Microsoft Knowledge Base:

927009 Podczas próby wyświetlenia dokumentu programu Microsoft Office 2007 w programie Windows Internet Explorer 7 zostanie otwarte nowe okno

Uwaga Jeśli zmodyfikujesz rejestr przy użyciu metody wymienionej w artykule bazy wiedzy 927009, zmiany wpłyną na kontrolkę WebBrowser używaną w aplikacji. Zmiany mają również wpływ na wszystkie wystąpienia programu Internet Explorer. Ponadto ta metoda może nie działać w przypadku żadnych przyszłych wersji pakietów pakietu Microsoft Office. W związku z tym zalecamy użycie tej metody tylko w celu zapewnienia zgodności z istniejącą aplikacją.

Informacje

Aby uzyskać więcej informacji na temat korzystania z kontrolki WebBrowser, kliknij następujące numery artykułów, aby wyświetlić artykuły w bazie wiedzy Microsoft Knowledge Base:

304562 Visual Studio 2005 i Visual Studio .NET nie zapewniają kontrolki kontenera OLE dla Windows Forms

927009 Podczas próby wyświetlenia dokumentu programu Microsoft Office 2007 w programie Windows Internet Explorer 7 zostanie otwarte nowe okno