梁海珍
(武警指挥学院,天津 300250)
Word文档是日常工作中使用较多的文档格式之一,在实际应用中,用户希望一些应用程序也能够读取Word文档内容,为办公带来便利。而有时候在应用程序中不需要打开Word文档,只需要查找文档中是否含有某个关键词,虽然操作系统自带的搜索功能可以实现这一要求,但是操作起来比较麻烦,也不便于程序中模块的相互调用。如果应用程序自带检索功能,不仅可以省去与操作系统的搜索功能来回切换的步骤,而且还可将检索结果直观地呈现在应用程序中,便于程序中其他模块调用这些检索结果。
在应用程序中实现检索有多种方法,可以调用操作系统的“搜索”功能来实现,但是需要知道相应的接口,对于初学者来说比较困难。本文利用VC++实现在不打开Word文档的情况下,根据给定的关键词,检索某一给定路径下的所有Word文档,并统计出文档中有此关键词的文档数量与文档路径,并可对查找出的文档进行编辑修改。
VC++调用Microsoft Office产品中提供的OLE Automation自动化程序的接口,每一个Microsoft Office应用程序都在dll文件中提供了多种类型库资源,这种 dll文件叫做目标库(*.olb)。不同版本的应用程序其类型库文件的名字不同,如Word 2003 的为 msword.olb。本例由 VC++调用Word,参考VBA的方法,需要导入库文件并导入相关的类,使用Word中的各种功能。
本例编程实现在指定路径下查找给定关键词,并统计出该路径下符合条件的文档数量与路径,并可对选定文档进行编辑修改。例程运行如图1所示。其中实现步骤及各部分主要功能、代码如下:
//以读取下拉框中的关键词为例,也可自行输入
UpdateData();
findstr=m_skey;
我们以查找“研究生”关键词为例,从下拉框中选取,其运行界面如图1所示。
本例中将某个路径下所有文件夹与文件夹中的Word文档用树表示出来,用户可以选定左边目录树中某个文件夹作为查找范围。本文以“计算机系”文件夹为查找路径,当选中后,当前文件夹下的所有Word文档显示在右侧“当前结点下的所有Word文档”列表中,如图1右上方所示。
如果Word文档中关键词有的在文本框中,有的在正文中,而用VC调用Word的Find类对象后,是找不到文本框中的关键词的,仅能找到正文中的关键词。因此需要分别对正文与文本框进行查找。由于VC++操作Word的有关程序比较多,因此就不再赘述。
//对选定路径下的文档逐个查找
for(int j=0;j 图1 例程运行界面 (1)其中,在文档正文中查找关键词的主要代码如下: sel=Wordapp.GetSelection(); //Selection 类对象 find=sel.GetFind(); //Find 类对象 find.ClearFormatting(); BOOL flag=false; //初始化是否找到关键词的标志 //以下是有关参数设置 CComVariant FindText(findstr), MatchCase(false),// 区分大小写 MatchWholeWord(true),// 全字匹配 MatchWildcards(false),// 使用通配符 MatchSoundsLike(false),// 同音英文 MatchAllWordForms(false), Forward(false),Format(false),Replace(false),MatchKashida(false), MatchDiacritics(false),MatchAlefHamza(false),MatchControl(false); //查找 flag=find.Execute(&FindText,&MatchCase, &MatchWholeWord, &MatchWildcards, &MatchSoundsLike, &Match AllWordForms,&For ward,&Wrap, &Format,&ReplaceWith,&Replace, &MatchKashida,&Match-Diacritics, &MatchAlefHamza, &Match-Control); (2)在文档的文本框中查找关键词主要代码如下: 检索结束后,将会弹出文件数量统计结果,如图1提示框所示,主要代码如下: CString strcount; strcount.Format("检索完毕,共找到%d 个文件!",count); MessageBox(strcount," 检索分系统提示",MB_ICONWARNING); 将符合条件的文档路径显示在右下方“符合条件的文档”列表中,并可选定列表中的文档,“打开文档”进行编辑修改,如图1右下方所示。 本文在 VC++6.0、word2003 下调试通过,实现了利用VC++对指定路径下的word文档内容进行关键词检索,包括全文和文本框检索,并可对选中的Word文档进行打开编辑等操作。当文档数量很多时,运行速度会比较慢,但本例可以作为简单关键词检索的参考。为了进一步完善系统功能,还可以考虑利用操作系统提供的检索功能接口来对更多类型的文档进行检索。 [1]云舟工作室.中文版Word2000VBA一册通[M].北京:人民邮电出版社,2000. [2]Office编程手册合集(CHM)[Z]. [3]梁海珍.批量查找替换的实现[J].河北软件职业技术学院学报,2011(4).2.4 检索结果
3 小结