最近在写一个程序,根据用户的要求,需要将在程序中打开Word——就是将Word嵌入到程序当中。.NET本身没有提供这方面的容器控件,需要用第三方的。
在网上搜了一下,还真不少,但多数是要收费的,免费的很少。有个DSOFramer,虽说免费,但非常不好用,bug很多,需要自己动手修改,但源码又是用C++写的,自己水平不够,C++懂得不多。
后来在CodeProject上找到了一个UserControl,用C#写的,功能虽说简单,但已足够我的程序使用,通过作者提供的思路,我们还可以根据自己的需要来丰富它的功能,很是不错。
有兴趣的可以参考一下:Word Control for .NET
在程序中使用上面提到的那个UserControl,却遇到了一个问题,在控件中第一次打开Word文档没有任何问题,在关闭控件(即用其提供的CloseControl方法来关闭)后,再次打开一个Word文档,却产生了——RPC服务器不可用的错误,好几天来一直没有找到解决方法,今天又试了一下,发现可以正常重复多次打开Word文档了,由于对其中的一些知识自己还是有些欠缺,说不清具体是因为什么,先把解决方法公布出来。
方法很简单,就是修改一下其中的CloseControl方法,修改为:
publicvoid CloseControl()
{* this code is to reopen Word.try{deactivateevents =true;object dummy=null;document.Close(ref dummy,ref dummy,ref dummy);wd=null;wordWnd=0;deactivateevents =false;}catch{}}
又修改了一下源程序中的OnResize事件。可以到这里下载WinWordControl源程序