如何使用 WebBrowser 控件打开 Office 文档

针对 Office 2003 的支持已终止

Microsoft 已于 2014 年 4 月 8 日终止了针对 Office 2003 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

概要
在使用 Office 文档时,您可能希望在 Visual Basic 中直接显示这些文档,但又不想使用 OLE 容器控件创建嵌入的 OLE 对象,而是希望链接到现有的文档,并将其作为 ActiveX 文档对象就地打开。所幸的是,Microsoft WebBrowser 控件提供了一种解决方案。

本文演示如何浏览到现有 Office 文档,并使用 WebBrowser 控件在 Visual Basic 中显示该文档。
更多信息
ActiveX 文档是行为比传统 OLE 对象更像 ActiveX 控件的可嵌入的 OLE 对象。与常规嵌入对象不同的是,ActiveX 文档不是作为更大文档中所包含的对象而设计的。其本身可以算作是仅供查看器(如 Internet Explorer)查看或是与其他文档(如活页夹文件)一起集中到单个资源的完整文档。

尽管 Microsoft Visual Basic 目前不支持直接承载 ActiveX 文档,但可以使用 Internet Explorer 及其 WebBrowser 控件的功能来变通解决这一局限性。WebBrowser 控件 (Shdocvw.dll) 是 Internet Explorer 的一部分,并且只能在安装了 Internet Explorer 的系统上使用。

创建可打开 Office 文档的 Visual Basic 应用程序

请使用下列步骤创建可打开 Office 文档的 Visual Basic 应用程序:
  1. 启动 Visual Basic 并创建一个新的标准项目。默认情况下会创建 Form1。
  2. 项目菜单上,选择组件以打开组件对话框。在“组件”对话框中,添加对 Microsoft Common Dialog Control 和 Microsoft Internet Controls 的引用。单击“确定”将这些项目添加到工具箱。
  3. 将 WebBrowser 控件、CommonDialog 控件和 CommandButton 的实例添加到 Form1 中。
  4. 接着将下面的代码添加到 Form1 的“代码”窗口中:
    Option ExplicitDim oDocument As ObjectPrivate 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 IfEnd SubPrivate Sub Form_Load()   Command1.Caption = "Browse"   With CommonDialog1      .Filter = "Office Documents " & _      "(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt"      .FilterIndex = 1      .Flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly   End WithEnd SubPrivate Sub Form_Unload(Cancel As Integer)   Set oDocument = NothingEnd SubPrivate Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, _URL As Variant)   On Error Resume Next   Set oDocument = pDisp.Document   MsgBox "File opened by: " & oDocument.Application.NameEnd Sub					
  5. F5 键运行该项目。选择浏览按钮后,将出现打开对话框,您可以从中浏览到 Word、Excel 或 PowerPoint 文件。选择打开,这时文档应在 WebBrowser 控件中打开。然后会出现一个消息框,其中显示打开该文件的 Office 应用程序的名称。

使用 WebBrowser 控件时的注意事项

使用 WebBrowser 控件时应注意以下事项:
  • WebBrowser 控件不会同步浏览到文档。也就是说,在调用 WebBrowser1.Navigate 时,该调用会在文档被完全加载之前 将控件返回到 Visual Basic 应用程序。如果打算为所包含的文档实现自动操作,则需要使用 NavigateComplete2 事件在文档完成加载后发出通知。使用传入的 WebBrowser 对象的文档属性获取对 Office 文档对象的引用,该对象在前述代码中设置为 oDocument。
  • WebBrowser 控件不支持菜单合并。如果需要将文档的菜单项与 Visual Basic 菜单一起显示,则必须改用 OLE 容器控件。
  • WebBrowser 控件在显示 Office 文档之前通常会隐藏所有停靠工具栏。您可以使用“自动化”功能通过类似下面的代码来显示浮动工具栏:
       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如何使用 Visual Basic 5.0 中的 WebBrowser 控件
188271 如何从 VB 打印 Web 浏览器控件的内容
191692 PRB:Shdocvw.dll 未包括在 PDW 安装程序包中
238313 PRB:从 Visual Basic 访问 Internet Explorer Document Object Model
web browser kbActiveDocs kbExcel kbVBp500 kbVBp600 kbWebBrowser kbPowerPt kbWord
属性

文章 ID:243058 - 上次审阅时间:03/31/2006 08:48:00 - 修订版本: 4.2

Microsoft Office Excel 2003, Microsoft Excel 2002 标准版, Microsoft Excel 2000 标准版, Microsoft Excel 97 标准版, Microsoft Visual Basic 6.0 专业版, Microsoft Visual Basic 5.0 专业版, Microsoft Visual Basic 6.0 企业版, Microsoft Visual Basic 5.0 企业版, Microsoft Office PowerPoint 2003, Microsoft PowerPoint 2002 标准版, Microsoft PowerPoint 2000 标准版, Microsoft PowerPoint 97 标准版, Microsoft Office Word 2003, Microsoft Word 2002 标准版, Microsoft Word 2000 标准版, Microsoft Word 97 标准版

  • kbhowto KB243058
反馈