c++读取word文件

来源:互联网 发布:mac l2tp服务器未响应 编辑:程序博客网 时间:2024/05/17 08:47

c++读取word文件

1.在vs中新建一控制台程序,选支持MFC

在支持MFC上打钩

2.右击项目->选择类向导->选择添加类型库中的MFC类

这里写图片描述

3.选择从文件中添加->选择你的word的类型库(就是添加MSWOR.OLB,列如我的office装在D盘,一般可以在D:\Office\Office15中找到”),选择完毕后,添加在本例中要用到_Application,Documents,_Document,Range这四个类,添加他们后按完成

红色的是导入类

4.接着我们可以在我们的头文件中看到刚添加进的类。

这里写图片描述

双击进入刚添加的头文件,将最上面一行的
*#import “你的MSWORD.OLB位置” no_namespace

替换为

*#import “你的MSWORD.OLB位置” no_namespace raw_interfaces_only \
rename(“FindText”,”_FindText”) \
rename(“Rectangle”,”_Rectangle”) \
rename(“ExitWindows”,”_ExitWindows”) *

5.进入你的main函数所在的cpp文件,加入头文件引用

#include"CApplication.h"#include"CDocument0.h"#include"CDocuments.h"#include"CRange.h"

6.在main函数中加入如下代码:

int  nRetCode  =  0;      if  (!AfxWinInit(::GetModuleHandle(NULL),  NULL,  ::GetCommandLine(),  0))      {          cerr  <<  _T("Fatal  Error:  MFC  initialization  failed")  <<  endl;          nRetCode  =  1;      }      else      {          if  (CoInitialize(NULL)  !=  S_OK)            {                AfxMessageBox(_T("初始化COM支持库失败!"));                return  -1;          }          CApplication  wordApp;          CDocuments  docs;          CDocument0  doc;          CRange  aRange;          COleVariant  vTrue((short)TRUE),                vFalse((short)FALSE),                vOpt((long)DISP_E_PARAMNOTFOUND,  VT_ERROR);            wordApp.CreateDispatch(_T("Word.Application"),NULL);          docs=wordApp.get_Documents();          doc=docs.Open(COleVariant(_T("d:\\txt.doc")),vFalse,vTrue,vFalse,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt);          aRange=doc.Range(vOpt,vOpt);          AfxMessageBox(aRange.get_Text());//这里GetText得到的就是word文件的纯文本了,GetText()输出的是Cstring格式。(下一篇讲cstring转char)        doc.Close(vOpt,vOpt,vOpt);          wordApp.Quit(vOpt,vOpt,vOpt);          CoUninitialize();      }      return  nRetCode;  

7.编译:
出现错误:

这里写图片描述

我们把出错的地方加上int。

再次编译,出错:

这里写图片描述

我们在变量前加int标识符。
编译,通过了,运行:

这里写图片描述

通过排查发现是
CoUninitialize();
这个语句出错了,查资料表明:

CoUninitialize()关闭当前线程的COM库,卸载线程加载的所有dll,释放任何其他的资源,关闭在线程上维护所有的RPC连接。

尝试将CoUninitialize()放在程序结束那。
运行通过,没有报错。

参考:http://www.cnblogs.com/zhangyin/archive/2007/03/04/663345.html

0 0