Office with .Net 系列之 ――― 在自己的程序中宿主Office

来源:互联网 发布:和程序员男朋友谈恋爱 编辑:程序博客网 时间:2024/06/02 11:51

Office with .Net 系列之 ――― 在自己的程序中宿主Office

 

 

“在自己的程序中宿主Office”的意思就是在我们自己开发的应用程序的窗体上,显示一个就像Office应用程序那样的界面,用来显示和操作Office文档。其实,通过使用Microsoft Web Browser这个ActiveX控件,我们能够非常方便的做到。

 

 

首先,在Visual Studio中创建一个C#语言的Windows应用程序,然后在左侧的工具箱中点击鼠标右键,选择“添加/移除选项”,就能够打开自定义工具箱窗口,在窗口中的COM组件列表中,我们就能找到“Microsoft Web Browser”(如果是中文版操作系统,这个控件也许叫“Microsoft Web 浏览器”)这个ActiveX控件,选择它,把它添加到我们的工具箱中。

 

 

将这个ActiveX控件直接拖到WinForms窗体上,如下图。另外,我们还添加了两个按钮,用来载入和卸载Word文档。

 

 

在第一个载入文档的按钮的事件代码中,我们直接打开一个Word文档:

 

 

Object missing = Type.Missing;

Object sFilePath = "d://hello.doc";

 

 

this.axWebBrowser1.NavigateComplete2 += new AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(axWebBrowser1_NavigateComplete2);

 

 

this.axWebBrowser1.Navigate2(ref sFilePath, ref missing, ref missing, ref missing, ref missing);

 

 

在上面的代码中,我们还给这个控件的NavigateComplete2事件添加了一个事件处理方法。NavigateComplete2事件是在控件载入Word文档完成后触发。

 

 

在第二个卸载Word文档的按钮的事件代码中,我们直接让控件访问一个空页面即可:

 

 

Object missing = Type.Missing;

Object sBlankPage = "about:blank";

this.axWebBrowser1.Navigate2(ref sBlankPage, ref missing, ref missing, ref missing, ref missing);

 

 

 

 

当我们载入一个Office文档时,在后台已经启动了一个相应的Office应用程序,如果要对显示出来的Office应用程序进行进一步的控制,我们就可以在下面所示的NavigateComplete2事件代码中获取相应的Microsoft.Office.Interop.Word.Application(对应启动的Word应用程序)对象实例和Microsoft.Office.Interop.Word.Document(对应打开的Word文档)对象实例。下面示范代码中的变量e是事件处理方法的参数:

 

 

Microsoft.Office.Interop.Word.Application wordApp =  e.pDisp.GetType().InvokeMember("Application", System.Reflection.BindingFlags.GetProperty, null, e.pDisp, null) as Microsoft.Office.Interop.Word.Application;

 

 

Microsoft.Office.Interop.Word.Document doc =  e.pDisp.GetType().InvokeMember("Document", System.Reflection.BindingFlags.GetProperty, null, e.pDisp, null) as Microsoft.Office.Interop.Word. Document;

 

 

当我们运行程序时,效果如下:

 

 

如果大家使用Visual Studio 2005开发,那么将更加方便,因为WinForms 2.0中已经自带了一个叫做“WebBrowser”的WinForms控件,它其实就是对“Microsoft Web BrowserActiveX控件的封装。这样我们就能在窗体上直接使用“WebBrowser”控件,而不需要额外引用其他ActiveX控件了。

原创粉丝点击