您的位置:首页 > 编程语言 > C#

如何使用 WebBrowser 控件在 Visual C# 2005 或 Visual C# .NET 中打开 Office 文档

2006-07-21 16:27 1121 查看
本页



概要




更多信息




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




使用 WebBrowser 控件时的注意事项




参考


var sectionFilter = "type != 'notice' && type != 'securedata' && type != 'querywords'";
var tocArrow = "/library/images/support/kbgraphics/public/en-us/downarrow.gif";
var depthLimit = 10;
var depth3Limit = 10;
var depth4Limit = 5;
var depth5Limit = 3;
var tocEntryMinimum = 1;

概要

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

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



回到顶端

更多信息

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

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



回到顶端

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

loadTOCNode(2, 'moreinformation');要创建可打开 Office 文档的 Visual C# 应用程序,请按照下列步骤操作:
1.在 Visual C# 2005 或 Visual C# .NET 中新建一个 Windows 应用程序项目。默认情况下创建 Form1。
2.工具菜单上,单击自定义工具箱以打开自定义工具箱对话框。在 COM 组件选项卡上,添加一个对 Microsoft WebBrowser 的引用。单击确定,将 WebBrowser 控件添加到 Windows 窗体工具箱。WebBrowser 控件会显示出来,并且在工具箱中带有 Explorer(资源管理器)字样。

注意:在 Visual Studio 2005 中,不必执行步骤 2。
3.使用该工具箱向 Form1 添加一个 WebBrowser 控件、一个 OpenFileDialog 控件和一个 CommandButton 控件。这就会向 Form1 类添加 AxWebBrowser1OpenFileDialog1Button1 成员变量。
4.在 Form1 上,双击 button1。这就会向 Form1 添加 Button1_Click 事件。
5.在 Form1 的代码窗口中,向列表添加以下命名空间:
[code]using System.Reflection;

[/code]
6.如下所示在 Form1 类中定义一个私有成员:
[code]private Object oDocument;

[/code]
7.在 Form1 类的 InitializeComponent 方法的末尾,添加以下代码以处理 Form1_LoadForm1_ClosedaxWebBrowser1_NavigateComplete2 事件:
[code]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);

[/code]
8.将下面的代码
[code]private void button1_Click(object sender, System.EventArgs e)
{
}

[/code]替换为:
[code]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() );
}

[/code]注意:您必须在 Visual Studio 2005 中更改此代码。默认情况下,当您创建 Windows 窗体项目时,Visual C# 向该项目添加 一个窗体。该窗体被命名为 Form1。表示该窗体的两个文件被命名为 Form1.cs 和 Form1.designer.cs。您在 Form1.cs 中编写代码。Windows 窗体设计器在 Form1.designer.cs 文件中 编写代码,这些代码实现通过从工具箱拖放控件所执行的所有操作。

有关 Visual C# 2005 中 Windows 窗体设计器的更多信息,请访问下面的 Microsoft Developer Network (MSDN) 网站:
http://msdn2.microsoft.com/zh-cn/library/ms173077.aspx (http://msdn2.microsoft.com/zh-cn/library/ms173077.aspx)
9.按 F5 运行该项目。单击浏览后,会出现打开对话框,您可以使用该对话框浏览到 Word 文档、Excel 工作表或 PowerPoint 演示文稿。选择任一文件,然后单击打开。文档在 WebBrowser 控件内打开,并出现一个显示有 Office 文档服务器名称的消息框。


回到顶端

使用 WebBrowser 控件时的注意事项

loadTOCNode(2, 'moreinformation');在使用 WebBrowser 控件时,应考虑以下几点:
WebBrowser 控件异步浏览到文档。在调用 WebBrowser1.Navigate 时,该调用会在文档完全加载之前将控制权返回给 Visual C# 应用程序。如果您打算为所包含的文档实现自动操作,则必须使用 NavigateComplete2 事件在文档完成加载后发出通知。使用传入的 WebBrowser 对象的 Document 属性可获得对 Office 文档对象的引用,在前面的代码中,该对象被设置为 oDocument
WebBrowser 控件不支持菜单合并。
在 Internet Explorer 版本 5.0 和更高版本中,可以使用以下代码显示停靠工具栏:
[code] // 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);

[/code]
已知在一个项目中有多个 WebBrowser 控件并且每个控件都加载有相同类型的 Office 文档(即,全部都是 Word 文档或者全部都是 Excel 电子表格)时,会出现多种问题。建议一个项目只使用一个控件,并且一次只浏览到一个文档。

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

[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐