vc操作word:[1]初始化连接、创建和写入
1、打开vc6.0,新建一个MFC的基本对话框工程,我这里随便给它命名为1_1
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/cfa9ae04541bd10f3bcb2b29ba0e1799e82aa740.jpg)
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/430174fec314f1c5460367723c27ac5307889d40.jpg)
2、点击查看,建立类向导,点击AddClass,选择Fromatypelibrary。选择Microsoft Office安装目录下的MSWORD.OLE文件(我的默认路径是C:\Program Files\Microsoft Office\OFFICE11\MSWORD.OLE),打开。弹出一个增加类的界面,按shift全选(在程序设计的过程中,我们会知道哪些类是必要的,这里不管它),OK
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/ad121888912ca5ca0605b6fb8bfc77f7990e9440.jpg)
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/423041db3620b93a29640676ad0f8835dc8a8a40.jpg)
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/dccb47de45078801d49df3f2b18ca608a40f8240.jpg)
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/95bd4e8c9bcec7f87f9a7b6e034ce54a2e27fb40.jpg)
3、在类视图区,会发现增加了很多类。下面我们首先进行COM组建的初始化,在应用程序的InitInstance函数中增加以下代码:if(CoInitialize(NULL)!=S_OK){AfxMessageBox("初始化COM组件失败!");return FALSE;}
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/2947750192dd3340491eb734881c99c0aefcf140.jpg)
4、接下来自己新建一个类,用来封装操作Word的API函数。点击插入,新建类,class type选择Generic Class(没有基类的),类名为CMeOffice。
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/90c61d1c99c0affce568029c2372941fbfe4ea40.jpg)
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/359bee5e4a237971f3f3b06b93196120a6cde340.jpg)
5、打开文件视图区,编译头文件MeOffice.h,在其中加入:#include"comdef.h"#include"atlbase.h"#include"msword.h"和public:_Application m_wdApp;Documents m_wdDocs;_Document m_wdDoc;Selection m_wdSel;BOOL CreateApplication(); //创建ApplicationBOOL CreateDocument(); //创建Document文档BOOL WriteText(LPSTR szStr);//向文档中写入数据
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/0d2fe5f202b375d78f959d47515872dadf49d840.jpg)
6、编辑MeOffice.cpp文件,加入自定义函数的实现(下面的代码的逻辑其实很好懂、看函数名就基本能明白函数的功能)://这邗锒凳审个函数打开一个没有文档的应用程序界面BOOL CMeOffice::CreateApplication(){if(FALSE==m_wdApp.CreateDispatch("Word.Application")){AfxMessageBox("创建Application失败!");return FALSE;}m_wdApp.SetVisible(TRUE); //是否显示return TRUE;}BOOL CMeOffice::CreateDocument(){if(!m_wdApp.m_lpDispatch){AfxMessageBox("Application没有成功创建!");return FALSE;}m_wdDocs.AttachDispatch(m_wdApp.GetDocuments());if(!m_wdApp.m_lpDispatch){AfxMessageBox("AttachDispatch失败");return FALSE;}CComVariant Template("");CComVariant NewTemplate(false),DocumentType(0),Visible;m_wdDocs.Add(&Template,&NewTemplate,&DocumentType,&Visible);//上面的代码足够新建一个文档m_wdDoc=m_wdApp.GetActiveDocument();if(!m_wdDoc.m_lpDispatch){AfxMessageBox("GetActiveDocument失败");return FALSE;}m_wdSel=m_wdApp.GetSelection();if(!m_wdSel.m_lpDispatch){AfxMessageBox("GetSelection失败");return FALSE;}return TRUE;}BOOL CMeOffice::WriteText(LPSTR szStr){m_wdSel.TypeText(szStr);return TRUE;}
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/739bc049610f8b56b0ea08db9ce951e10ff8d340.jpg)
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/50a010f85856d53d8ccafe5a47d2bb665059ca40.jpg)
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/84010e2a04e23ea217ac86c92b10bc33ed38c340.jpg)
7、好了,类我们已经封装好了。现在我们可以调用封装的函数,实现操作word的功能。在对话框类中新建一个成员变量CMeOffice m_meOffice;在对话框初始化函数中加入下面的沪枭诽纾代码:m_meOffice.CreateApplication();m_meOffice.CreateDocument();m_meOffice.WriteText("我是中国人民的儿子,我深深地爱着我的祖国!");
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/18aebc5f0c14c27be56ca03a2a46b7b1eff93941.jpg)
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/35f2224133bad3414193c784427622bc7cc52c41.jpg)
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/23fd63c5cf672b5f9ca823253314f4d0b4032741.jpg)
8、运行程序,就自动新建了一个Application,里面有一个Document,上面显示“我是中国人民的儿子,我深深地爱着我的祖国!”
![vc操作word:[1]初始化连接、创建和写入](https://exp-picture.cdn.bcebos.com/b955ead0b503c8d2091061fd498333bf3aef2141.jpg)
9、主窗口的对话框没有隐藏,看起来很别扭,但我已经受不了了。写这个比想象的困难不少~