如何使用 WebBrowser 控制項開啟 Office 文件

文章翻譯 文章翻譯
文章編號: 243058 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

處理 Office 文件時,您可能希望直接在 Visual Basic 中顯示這些文件,卻不想使用 OLE 容器控制項建立內嵌 OLE 物件。相反的,您會想要連結現有的文件,並以「ActiveX 文件」物件的形式就地開啟該文件。幸好,Microsoft WebBrowser 控制項提供解決方案。

本文將告訴您,如何使用 WebBrowser 控制項瀏覽現有的 Office 文件,並將之顯示於 Visual Basic 中。

其他相關資訊

ActiveX 文件是可內嵌的 OLE 物件,其行為模式比較像 ActiveX 控制項而不像傳統的 OLE 物件。與一般內嵌物件不同的是,ActiveX 文件並非設計成包含於大型文件中的物件。相反的,其本身如同一份完整的文件,主要供檢視器 (如 Internet Explorer) 檢視,或與其他文件 (如文件夾檔案) 合併而集結成單一資源。

雖然 Microsoft Visual Basic 目前不支援直接裝載 ActiveX 文件,您仍可運用 Internet Explorer 及其 WebBrowser 控制項的能力來突破這項限制。WebBrowser 控制項 (Shdocvw.dll) 屬於 Internet Explorer 的一部分,且唯有已經安裝 Internet Explorer 的系統才能使用。

建立 Visual Basic 應用程式以開啟 Office 文件

請依照下列步驟執行,建立 Visual Basic 應用程式以開啟 Office 文件:
  1. 啟動 Visual Basic 然後建立新的「標準」專案。根據預設,會建立 Form1。
  2. [專案] 功能表選取 [設定使用元件],以開啟 [設定使用元件] 對話方塊。在 [設定使用元件] 對話方塊中,加入 Microsoft Common Dialog Control 和 Microsoft Internet Controls 的參考。按一下 [確定],將參考的項目加入工具箱。
  3. 在 Form1 上加入 WebBrowser 控制項、CommonDialog 控制項和 CommandButton 的執行個體。
  4. 接著,在 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. F5 以執行專案。當您選取 [Browse] 按鈕時,[開啟舊檔] 對話方塊便會出現,讓您可以瀏覽 Word、Excel 或 PowerPoint 檔案。選擇 [開啟] 後,文件應該會在 WebBrowser 控制項中開啟。接著出現訊息方塊,顯示開啟檔案的 Office 應用程式的名稱。

使用 WebBrowser 控制項的注意事項

使用 WebBrowser 控制項的注意事項如下:
  • WebBrowser 控制項是以非同步方式瀏覽文件。這表示當您呼叫 WebBrowser1.Navigate 時,方法呼叫會在文件載入完成之前就回到 Visual Basic 應用程式的控制。如果您打算自動化處理控制項中包含的文件,則必須使用 NavigateComplete2 事件來判斷文件何時載入完成。請使用所傳入 WebBrowser 物件的 Document 屬性,以便取得 Office 文件物件 (上述程式碼將之設定為 oDocument) 的參考。
  • WebBrowser 控制項不支援功能表合併。如果您需要在 Visual Basic 功能表上顯示文件的功能表項目,則必須改用 OLE 容器控制項。
  • WebBrowser 控制項顯示 Office 文件之前通常會隱藏停駐工具列。您可以運用 Automation 功能來顯示浮動工具列,如下列程式碼所示:
       With oDocument.Application.CommandBars("Standard")
          .Position = 4 '[msoBarFloating]
          .Visible = True
       End With
    					
    更新版 Internet Explorer (5.0 及以上) 甚至還能讓您使用下列程式碼顯示停駐工具列:
     ' 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
    					
  • 目前已發現一些已知問題,會在單一專案中包含多個 WebBrowser 控制項,且每個控制項載入相同類型的 Office 文件 (亦即全部載入 Word 文件或全部載入 Excel 試算表) 時發生。因此建議您每個專案只用一個控制項,並且一次瀏覽一份文件。

    最常發生的問題是 Office 命令列失效。如果您在相同的表單上放置兩個 WebBrowser 控制項,兩者都載入 Word 文件,並運用上述某種技巧顯示工具列,則只有一組工具列能發生作用且正常運作。另一組工具列將會失效而無法使用。
  • 如果要清除 WebBrowser 目前的內容,請在另一個指令按鈕的 Click 事件中 (或程式碼內其他適當位置) 使用下列程式碼,瀏覽到預設的空白頁面:
       WebBrowser1.Navigate "about:blank"
    					

?考

如需有關 Visual Basic 中 WebBrowser 控制項的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
162719 How To Use the WebBrowser Control from Visual Basic 5.0
188271 HOWTO:從 VB 列印 Web 瀏覽器控制項的內容
191692 PRB:Shdocvw.dll Is Not Included in PDW Setup Package
238313 PRB:Accessing the Internet Explorer Document Object Model From Visual Basic

屬性

文章編號: 243058 - 上次校閱: 2006年3月31日 - 版次: 4.2
這篇文章中的資訊適用於:
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft PowerPoint 97 Standard Edition
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Word 97 Standard Edition
關鍵字:?
kbhowto KB243058
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com