用C#实现在Word文档中搜索文本

用C#实现在Word文档中搜索文本,第1张

用C#实现在Word文档中搜索文本,第2张

Word的对象模型有详细的帮助文档,这些文档放在office安装程序目录中。office 2003在Program Files \ Microsoft Office \ Office 11 \ 2052下,文档本身是为VBA提供的。您还可以在该目录中看到所有Office应用程序的VBA帮助。

打开VBAWD10。CHM并查看word的对象模型。根据以往的经验,很容易找到文档对象下的Content属性,它会返回文档的文本部分的一个Range对象。从这个对象中获取所有的文档内容并不难,然后使用string的IndexOf()方法就很容易达到目的。

对象文件名= " ";//要打开的文档的路径
string strKey = " ";//要搜索的文本
object missing value = type . missing;

词。应用wp =新词。application class();
Word。文档wd=wp。Documents.Open(引用文件名,引用缺失值,
引用缺失值,引用缺失值,
引用缺失值,引用缺失值,
引用缺失值,引用缺失值,
引用缺失值,引用缺失值,
引用缺失值,引用缺失值,
引用缺失值,引用缺失值);

if(wd . content . text . index of(strkey)> = 0)
{
messagebox . show("文档包含指定的关键字!",“搜索结果”,MessageBoxButtons。OK);
}
else
{
messagebox . show("文档中没有指定的关键字!",“搜索结果”,MessageBoxButtons。OK);
}


但是,这种做法很勉强。对于小文档,没有问题。对于超长超大文档,这种实现方式埋下了bug,而且是程序级的bug,因为正常测试会很难发现问题,很难定量描述程序在使用中会有什么样的结果。

其实word中已经提供了可以作为搜索的对象查找,在对象模型中很容易找到。对应的描述如下:该对象表示搜索操作的执行条件。Find对象的属性和方法与“替换”对话框中的选项一致。从模型的角度来看,Find对象是Selection的成员,从示例代码来看,似乎也是Range的成员。找到Range的属性,它就是。然后修改上面的代码:

wd。Content . Find.Text = strKey
if (wd。content . find . execute(ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref MissingValue,
ref MissingValue,ref missing value,
ref MissingValue,
ref missing]{
,“搜索结果”,MessageBoxButtons。OK);
}
else
{
messagebox . show("文档中没有指定的关键字!",“搜索结果”,MessageBoxButtons。OK);
}

似乎也不是这样,因为我只需要判断指定的文本是否在文档中,不需要知道它出现了多少次。如果要搜索多个文本,我每次都要搜索整个文档吗?假设我要搜索的文本包含在文档中。在某些情况下,我要搜索的文本包含在文档的开头,在最糟糕的情况下,我要搜索的文本包含在文档的结尾。如果每次都选择文档的一部分进行判断,满足条件就结束搜索,避免每次都搜索整个文档。模型中的段落对象现在派上了用场。再次修改代码:


int i=0,iCount = 0;
Word。查找wfnd

if (wd.Paragraphs!=null && wd.Paragraphs.Count>0)
{
iCount=wd.Paragraphs.Count;
for(i=1;i

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 用C#实现在Word文档中搜索文本

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情