使用WebBrowser 控件打开Office文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何使用WebBrowser 控件在Visual C# 2005 或Visual C# .NET 中打开Office 文档
查看本文应用于的产品
本文的发布号曾为CHS304662
有关本文的Microsoft Visual Basic .NET 版本,请参阅304643。
本页
∙概要
∙更多信息
o创建可打开Office 文档的Visual C# 应用程序
o使用WebBrowser 控件的注意事项
o将WebBrowser 控件与2007 Microsoft Office 程序一
起使用时的注意事项
∙参考
展开全部| 关闭全部
概要
您可能希望直接在Microsoft Visual C# 窗体中显示或嵌入Microsoft Office 文档。
Microsoft Visual C# 2005 和Microsoft Visual C# .NET 不提供用于在窗体中嵌入Office 文档的OLE 控件。
如果希望嵌入现有文档并将其作为Visual C# 窗体内的就地ActiveX 文档对象打开,一个可能的解决方案是使用Microsoft WebBrowser 控件。
本文阐述如何使用WebBrowser 控件在Visual C# 窗体内浏览到现有Office 文档并显示它。
回到顶端
更多信息
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# 应用程序
要创建可打开Office 文档的Visual C# 应用程序,请按照下列步骤操作:
1.在Visual C# 2005 或Visual C# .NET 中新建一个Windows 应用程序项目。
默
认情况下创建Form1。
注意:在Visual C# 2005 中,如果您找不到SHDocVw.dll 文件或AxSHDocVw.dll
文件,请在Visual Studio 命令提示符下运行下面的命令:
aximp %WINDIR%\system32\shdocvw.dll
然后,为Microsoft WebBrowser 控件创建公共语言运行库代理(SHDocVw.dll) 和
Windows 窗体代理(AxSHDocVw.dll)。
若要在Visual C# 2005 中添加DLL 文
件,请按下列步骤操作:
a.在“项目”菜单上,单击“添加引用”。
b.在“添加引用”对话框中,单击“浏览”。
c.找到并选择AxSHDocVw.dll 和SHDocVw.dll 文件。
d.若要为这两个文件添加项目引用,请单击“确定”。
2.在“工具”菜单上,单击“自定义工具箱”以打开“自定义工具箱”对话框。
在“COM 组件”
选项卡上,添加一个对“Microsoft WebBrowser”的引用。
单击“确定”,将WebBrowser
控件添加到Windows 窗体工具箱。
WebBrowser 控件会显示出来,并且在工具箱中
带有“Explorer”(资源管理器)字样。
注意:在Visual Studio 2005 中,不必执行步骤2。
3.使用该工具箱向Form1 添加一个WebBrowser 控件、一个OpenFileDialog 控件
和一个CommandButton 控件。
这就会向Form1 类添加“AxWebBrowser1”、
“OpenFileDialog1”和“Button1”成员变量。
在Visual C# 2005 中,会添加
“webBrowser1”、“openFileDialog1”和“button1”成员变量。
4.在Form1 上,双击“Button1”。
这就会向Form1 添加”Button1_Click”事件。
5.在Form1 的代码窗口中,向列表添加以下命名空间:
ing System.Reflection;
7.如下所示在Form1 类中定义一个私有成员:
private Object oDocument;
8.在Form1 类的“InitializeComponent”方法的末尾,添加以下代码以处理
“Form1_Load”、“Form1_Closed”和“axWebBrowser1_NavigateComplete2”事件:
9.this.axWebBrowser1.NavigateComplete2 += new
AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHand ler(this.axWebBrowser1_NavigateComplete2);
10.this.Load += new
System.EventHandler(this.Form1_Load);
11.this.Closed += new
System.EventHandler(this.Form1_Closed);
12.将下面的代码
13.private void button1_Click(object sender,
System.EventArgs e)
14.{
15.}
替换为:
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.GetPro perty,null,o,null);
Object oApplication =
o.GetType().InvokeMember("Application",BindingFlags.Get Property,null,oDocument,null);
Object oName =
o.GetType().InvokeMember("Name",BindingFlags.GetPropert
y ,null,oApplication,null);
MessageBox.Show("File opened by: " + oName.ToString() );
}
注意:您必须在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) 网站:
/zh-cn/library/ms173077.aspx
16.按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_HIDETOOL
BARS,
SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,ref
refmissing , ref refmissing);
∙几个已知问题:在一个项目中有多个WebBrowser 控件并且每个控件都加载有相同类型的Office 文档(即,全部都是Word 文档或者全部都是Excel 工作表)。
建议一个
项目只使用一个控件,并且一次只浏览到一个文档。
最常见的问题发生在Office 命令栏上(命令栏会被禁用)。
如果同一个窗体上有两个
WebBrowser 控件,且两个控件都加载有Word 文档,而您使用了前面某一种技术显
示了工具栏,那么只有一组工具栏会是活动的,且只有该工具栏能正常工作。
另外一个
则被禁用,无法使用。
∙若要清除WebBrowser 控件的当前内容,请在另一个命令按钮的“Click”事件中(或在代码中的其他某个适当位置),使用下面的代码浏览到默认空白页:
∙ AxWebBrowser1.Navigate("about:blank");
回到顶端
将WebBrowser 控件与2007 Microsoft Office 程序一起使用时的注意事项
默认情况下,2007 Office 程序不会在Web 浏览器中打开Office 文档。
这种行为也会影响WebBrowser 控件。
我们建议您在开发用于打开2007 Office 文档的应用程序时使用自定义ActiveX 文档容器,而不要使用WebBrowser 控件。
有关自定义ActiveX 文档容器的更多信息,请单击下面的文章编号,以查看Microsoft 知识库中相应的文章:
311765Visual Basic 或HTML 中承载Office 文档的Visual C++ ActiveX 控件
对于要求与WebBrowser 控件实现向后兼容的现有应用程序,可以更改注册表来配置Internet Explorer。
可以使用此方法来配置Internet Explorer 以便在Web 浏览器中打开2007 Office 文档。
有关更多信息,请单击下面的文章编号,以查看Microsoft 知识库中相应的文章:927009尝试在Windows Internet Explorer 7 中查看2007 Microsoft Office 程序文档时会打开一个新的窗口
注意:如果使用Microsoft 知识库文章927009 中提及的方法更改注册表,则更改会影响您在应用程序中使用的WebBrowser 控件。
更改还会影响所有Internet Explorer 实例。
此外,对未来版本的Microsoft Office 套件,该方法可能不再适用。
因为,我们建议您仅将此方法用于对现有应用程序的兼容。
回到顶端
参考
有关使用WebBrowser 控件的更多信息,请单击下面的文章编号,以查看Microsoft 知识库中的相应文章:
304562Visual Studio 2005 和Visual Studio .NET 不为Windows 窗体提供OLE 容器控件
243058如何使用WebBrowser 控件打开Office 文档
162719如何通过Visual Basic 5.0 使用WebBrowser 控件
202476BUG:无法在OLE 或WebBrowser 控件中编辑Word 文档
188271如何从VB 打印Web 浏览器控件的内容
191692PRB:Shdocvw.dll 未包含在PDW 安装程序包中
238313PRB:从Visual Basic 访问Internet Explorer 文档对象模型
927009尝试在Windows Internet Explorer 7 中查看2007 Microsoft Office 程序文档时会打开一个新的窗口
回到顶端
这篇文章中的信息适用于:
回到顶端
关键字:kbhowto kbactivedocs kbwebbrowser kbautomation KB304662
回到顶端
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。
所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。
Microsoft 和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。
在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。