HOW TO:使用 WebBrowser 控件在 Visual C# .NET 中打开 Office 文档 (From MSDN)

有关本文的 Microsoft Visual Basic .NET 版本,请参阅 304643

概要

您可能希望直接在 Microsoft Visual C# .NET 窗体中显示或嵌入 Microsoft Office 文档。Visual C# .NET 不提供用于在窗体中嵌入 Office 文档的 OLE 控件。如果希望嵌入现有文档并将其作为 Visual C# .NET 窗体内的就地 ActiveX 文档对象打开,一个可能的解决方案是使用 WebBrowser 控件。

本文阐述如何使用 WebBrowser 控件在 Visual C# .NET 窗体内浏览到并显示现有的 Office 文档。

更多信息

ActiveX 文档是比传统的 OLE 对象更像 ActiveX 控件的可嵌入的 OLE 对象。与传统嵌入对象不同的是,ActiveX 文档不是作为更大文档中所包含的对象而设计的。其本身可以算作是仅供查看(如用 Microsoft Internet Explorer 查看)或是与其他文档(如 Microsoft Office 活页夹文件)一起集中到单个资源的完整文档。 WebBrowser 控件中承载的 ActiveX 文档始终是活动的;因此,与传统的 OLE 嵌入对象不同,无需就地激活。

尽管 Microsoft Visual C# .NET 当前不支持直接承载 ActiveX 文档,但您可以使用 WebBrowser 控件来达到这一目的。 WebBrowser 控件 (Shdocvw.dll) 是 Internet Explorer 的一部分并且只能在安装了 Internet Explorer 的系统上使用。

创建可打开 Office 文档的 Visual C# .NET 应用程序

要创建可打开 Office 文档的 Visual C# .NET 应用程序,请按照下列步骤操作:
  1. 在 Visual C# .NET 中新建一个 Windows 应用程序项目。默认情况下会创建 Form1。
  2. 工具菜单上,单击自定义工具箱以打开自定义工具箱对话框。在 COM 组件选项卡上,添加一个对 Microsoft WebBrowser 的引用。单击确定,将 WebBrowser 控件添加到 Windows 窗体工具箱。WebBrowser 控件会显示出来,并且在工具箱中带有 Explorer(资源管理器)字样。
  3. 使用该工具箱向 Form1 添加一个 WebBrowser 控件、一个 OpenFileDialog 控件和一个 CommandButton 按钮。这就会向 Form1 类添加 AxWebBrowser1OpenFileDialog1 Button1 成员变量。
  4. 在 Form1 上,双击 button1。这就会向 Form1 添加 Button1_Click 事件。
  5. 在 Form1 的代码窗口中,向列表添加以下命名空间:
    using System.Reflection;
    					
  6. 如下所示在 Form1 类中定义一个私有成员:
    private Object oDocument; 
  7. 在 Form1 类的 InitializeComponent 方法的末尾,添加以下代码以处理 Form1_LoadForm1_ClosedaxWebBrowser1_NavigateComplete2 事件:
    this.axWebBrowser1.NavigateComplete2 += new AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(this.axWebBrowser1_NavigateComplete2);
    this.Load += new System.EventHandler(this.Form1_Load);
    this.Closed += new System.EventHandler(this.Form1_Closed);
    					
  8. 将下面的代码
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    					
    替换为:
    private void button1_Click(object sender, System.EventArgs e)
    {
    
     String  strFileName;
    
     //Find the Office document.
     openFileDialog1.FileName = "";
     openFileDialog1.ShowDialog();
     strFileName = openFileDialog1.FileName;
    	        
     //If the user does not cancel, open the document.
     if(strFileName.Length != 0)
     {
      Object refmissing = System.Reflection.Missing.Value;
      oDocument = null;
      axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
     }
    }
    
    public void Form1_Load(object sender, System.EventArgs e)
    {
     button1.Text = "Browse";
     openFileDialog1.Filter = "Office Documents(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt" ;
     openFileDialog1.FilterIndex = 1;
    }
    
    public void Form1_Closed(object sender, System.EventArgs e)
    {
     oDocument = null;
    }
    
    public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
    {
    
     //Note: You can use the reference to the document object to 
     //      automate the document server.
    
     Object o = e.pDisp;
       
     oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
    			
     Object oApplication = o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null);
    
     Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null);
    
     MessageBox.Show("File opened by: " + oName.ToString() ); 
    }
    					
  9. 按 F5 键运行该项目。单击浏览后,会出现打开对话框,您可以使用该对话框浏览到 Word 文档、Excel 工作表或 PowerPoint 演示文稿。选择任一文件,然后单击打开。文档在 WebBrowser 控件内打开,并出现一个显示有 Office 文档服务器名称的消息框。

使用 WebBrowser 控件时的注意事项

在使用 WebBrowser 控件时,应考虑以下几点:
  • WebBrowser 控件异步浏览到文档。在调用 WebBrowser1.Navigate 时,该调用会在文档完全加载之前 将控制权返回给 Visual C# 应用程序。如果您打算为所包含的文档实现自动操作,则必须使用 NavigateComplete2 事件在文档完成加载后发出通知。使用传入的 WebBrowser 对象的 Document 属性可获得对 Office 文档对象的引用,在前面的代码中,该对象被设置为 oDocument
  • WebBrowser 控件不支持菜单合并。
  • 在 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.
     
     Object refmissing = System.Reflection.Missing.Value;
     axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,ref refmissing , ref refmissing);
    					
  • 已知在一个项目中有多个 WebBrowser 控件并且每个控件都加载有相同类型的 Office 文档(即,全部都是 Word 文档或者全部都是 Excel 电子表格)时,会出现多种问题。建议一个项目只使用一个控件,并且一次只浏览到一个文档。

    最常见的问题发生在 Office 命令栏上(命令栏会被禁用)。如果在同一个窗体上有两个 WebBrowser 控件,且两个控件都加载有 Word 文档,而您使用了前面某一种技术显示了工具栏,那么只有一组工具栏会是活动的,且只有该工具栏能正常工作。另外一个则被禁用,无法使用。
  • 要清除 WebBrowser 控件中的当前内容,请在另一个命令按钮的 Click 事件中(或在代码中的其他某个适当位置),使用下面的代码浏览到默认空白页:
       AxWebBrowser1.Navigate("about:blank");
    					

参考

有关使用 WebBrowser 控件的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

304562 INFO:Visual Studio .NET 不为 Win 窗体提供 OLE 容器控件

243058 HOWTO:Use the WebBrowser Control to Open an Office Document

162719 HOWTO:Use the WebBrowser Control from Visual Basic 5.0

202476 BUG:Cannot Edit Word Document in OLE or WebBrowser Control

188271 HOWTO:Print Contents of the Web Browser Control From VB

191692 PRB:Shdocvw.dll Is Not Included in PDW Setup Package

238313 PRB:Accessing the Internet Explorer Document Object Model From Visual Basic

这篇文章中的信息适用于:

  • Microsoft Visual C# .NET (2002)
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002
  • Microsoft Excel 2000
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002
  • Microsoft PowerPoint 2000
  • Microsoft Office Word 2003
  • Microsoft Word 2002
  • Microsoft Word 2000
最近更新:2004-2-13 (6.0)
关键字:kbActiveDocs kbAutomation kbhowto kbWebBrowser KB304662 kbAudDeveloper
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值