我用下面这段代码获取word文件的内容,在文档没有加过密码时一切正常,但是当文档加过密码或者文档不是一个正常的doc文件的时候就会出错,我希望当一个doc文件被加过密码或者不能被正常读取的时候就跳过这些文档,不知道要怎么做,请各位帮帮忙,谢谢了。AfxOleInit();//初始化Ole为调用Word做准备//初始化Word对象
CApplication0 app;
CDocument1 doc;
CRange0 aRange;
if(!app.CreateDispatch("Word.Application"))
{
AfxMessageBox("初始化Word出错!",MB_OK,NULL);
gv_sThdSearchFile=_T("文件查询结束!");
return 0;
}COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND,VT_ERROR); app.put_Visible(FALSE);
CDocuments0 docs = app.get_Documents();
doc=docs.Open(COleVariant(filename),vFalse,vTrue,vFalse,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt);//获取整个文档的内容
aRange=doc.Range(vOpt,vOpt);
CString strDoc;
strDoc = aRange.get_Text();
CDocuments0 docs2 = app.get_ActiveDocument();
docs2.Close(vOpt,vOpt,vOpt);
//退出Word
VARIANT SaveChanges,OriginalFormat,RouteDocument; //定义调用QUIT时使用的参数
SaveChanges.vt=VT_BOOL; //设置退出WORD时候的保存参数
SaveChanges.boolVal=VARIANT_FALSE; //为不保存任何文档,模板及设置
::VariantInit(&OriginalFormat); //清空变量
RouteDocument.vt=VT_EMPTY; //清空变量的另一种方法
//调用Quit退出WORD应用程序。当然不调用也可以,那样的话WORD还在运行着那
app.Quit(&SaveChanges,&OriginalFormat,&RouteDocument);
app.ReleaseDispatch(); //释放对象指针。切记,必须调用
CApplication0 app;
CDocument1 doc;
CRange0 aRange;
if(!app.CreateDispatch("Word.Application"))
{
AfxMessageBox("初始化Word出错!",MB_OK,NULL);
gv_sThdSearchFile=_T("文件查询结束!");
return 0;
}COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND,VT_ERROR); app.put_Visible(FALSE);
CDocuments0 docs = app.get_Documents();
doc=docs.Open(COleVariant(filename),vFalse,vTrue,vFalse,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt);//获取整个文档的内容
aRange=doc.Range(vOpt,vOpt);
CString strDoc;
strDoc = aRange.get_Text();
CDocuments0 docs2 = app.get_ActiveDocument();
docs2.Close(vOpt,vOpt,vOpt);
//退出Word
VARIANT SaveChanges,OriginalFormat,RouteDocument; //定义调用QUIT时使用的参数
SaveChanges.vt=VT_BOOL; //设置退出WORD时候的保存参数
SaveChanges.boolVal=VARIANT_FALSE; //为不保存任何文档,模板及设置
::VariantInit(&OriginalFormat); //清空变量
RouteDocument.vt=VT_EMPTY; //清空变量的另一种方法
//调用Quit退出WORD应用程序。当然不调用也可以,那样的话WORD还在运行着那
app.Quit(&SaveChanges,&OriginalFormat,&RouteDocument);
app.ReleaseDispatch(); //释放对象指针。切记,必须调用
解决方案 »
- 关于VS2010
- 刚才百度居然发现了大版主的回帖。。。
- 等待回调函数
- 招兼职程序员(上海)
- 请问怎么播放声音文件(.wav; .avi)
- #####关于位图操作等等.........
- 请问如何修改CListBox里某一item的CString
- 请问给文件目录更改名字的API是什么或怎样给目录改名.
- 麻烦的问题,何不进来看看。。。
- 我做了一个ftp client程序,为什么得到ftp服务上文件的创建日期都是1970年?
- 初学ATL SERVER,有几个不明白的地方,想请教大侠们指教一二,谢谢
- Unhandled exception at 0x1023ec7a (msvcr80d.dll)这个错误怎么回事呢?
{
}
catch (...)
{
//把所有的异常都处理
}
Office 2000 - Word文档 ◇◆※ 密码标记[第524字节] ※◆◇
无密码: 52BF 0000
只有打开权限密码: 53BF 0034
只有修改权限密码: 5ABF 0000
双密码: 5BBF 0034====================================估计更高版本的也差不多吧。
你的 Office 是哪个版本?也许不同版本的标记位置不一样吧。
明天有空‘研究’-下 Office 2003 的,我最高的就是这个版本了。今天有点晚了,我还得用我的“温酒吧”才能把它搞定,“利器”都在那个系统下。
有结果明天晚上给你回复。
我今天中午试了下Office 2003的Word文档,结果是跟Office 2000的一样。不过纠正6楼一点小错误:(文件字节序号从0开始算)
应该为:(文件字节序号从1开始算)时隔太久,记错了。 ^_^
楼主再看一下。