HOWTO:使用 WebBrowser 控件在 Visual C# .NET 中打开 Office 文档(转贴)

HOWTO:使用 WebBrowser 控件在 Visual C# .NET 中打开 Office 文档

文章编号:304662
最后修改:2004年2月13日
修订:1.0
本文的发布号曾为 CHS304662
有关本文的 Microsoft Visual Basic .NET 版本,请参阅 304643 (http://support.microsoft.com/kb/304643/EN-US/)

概要

您可能希望直接在 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");
					
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值