`

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

阅读更多
在word应用程序中搜索和替换文本是举手之劳的事情,通过word的对象模型,我们也可以使用编程方式来实现。 

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

  打开VBAWD10.CHM,看到word的对象模型,根据以往的使用经验,很容易在Document对象下找到Content属性,该属性会返回一个文档文字部分的Range对象,从这个对象中不难取到所有的文档内容,再用string的IndexOf()方法很容易达到目标。

object filename="";    //要打开的文档路径
string strKey="";      //要搜索的文本
object MissingValue=Type.Missing;

Word.Application wp
=new Word.ApplicationClass();
Word.Document wd
=wp.Documents.Open(ref filename,ref MissingValue,
               
ref MissingValue,ref MissingValue,
               
ref MissingValue,ref MissingValue,
               
ref MissingValue,ref MissingValue,
               
ref MissingValue,ref MissingValue,
               
ref MissingValue,ref MissingValue,
               
ref MissingValue,ref MissingValue,
               
ref MissingValue,ref MissingValue);

if (wd.Content.Text.IndexOf(strKey)>=0)
{
     MessageBox.Show(
"文档中包含指定的关键字!","搜索结果",MessageBoxButtons.OK);
}

else
{
     MessageBox.Show(
"文档中没有指定的关键字!","搜索结果",MessageBoxButtons.OK);
}


  不过,这种做法是很勉强的,对小文档来说,不存在问题,对超长超大的文档来说,这样的实现方法已经暗埋bug了,而且是程序级的bug,因为正常的测试会很难发现问题,在使用中导致程序出现什么样的结果也很难量化描述。

  其实,在word中已经提供了可以用作搜索的对象Find,在对象模型上也比较容易找到,对应的说明是这样的:该对象代表查找操作的执行条件。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 MissingValue,
               
ref MissingValue,ref MissingValue,
               
ref MissingValue))
{
     MessageBox.Show(
"文档中包含指定的关键字!","搜索结果",MessageBoxButtons.OK);
}

else
{
     MessageBox.Show(
"文档中没有指定的关键字!","搜索结果",MessageBoxButtons.OK);
}



  这样似乎也不是最好,因为我只要判断指定的文本是不是在文档中,而不需要知道它出现了几次,如果有多个要搜索的文本,难道每次都进行全文档搜索?假设我要搜索的文本包含在文档中,最好的情况是在文档开头就包含我要查找的文本,最坏的情况是在文档的最后包含要查找的文本,如果每次取一部分文档进行判断,符合条件就结束本次搜索,就可以避免每次搜索整个文档了。模型中的Paragraphs对象现在派上用场了,再修改一下代码:


int i=0,iCount=0;
Word.Find wfnd;

if (wd.Paragraphs!=null && wd.Paragraphs.Count>0)
{
    iCount
=wd.Paragraphs.Count;
    
for(i=1;i<=iCount;i++)
    
{
        wfnd
=wd.Paragraphs[i].Range.Find;
        wfnd.ClearFormatting();
        wfnd.Text
=strKey;
        
if (wfnd.Execute(ref MissingValue,ref MissingValue,
               
ref MissingValue,ref MissingValue,
               
ref MissingValue,ref MissingValue,
               
ref MissingValue,ref MissingValue,
               
ref MissingValue,ref MissingValue,
               
ref MissingValue,ref MissingValue,
               
ref MissingValue,ref MissingValue,
               
ref MissingValue))
        
{
               MessageBox.Show(
"文档中包含指定的关键字!","搜索结果",MessageBoxButtons.OK);
               
break;
        }

    }

}


 
分享到:
评论

相关推荐

    C#操作Word——C#向Word文档中写入文字

    例如,在本实例中,我们使用Paragraphs集合中的索引获取Word文档中的段落对象,然后通过Paragraph段落对象的Range属性得到文档中段落的范围,最后通过范围对象的Text属性获取或设置段落内的文本信息。 知识点2:C#...

    C# 定位Word文档中的某个位置插入文本

    通过以上三种方法,我们可以在C#中轻松实现定位Word文档中的某个位置并插入文本的功能。这些方法各有特点,可以根据实际情况灵活选择。需要注意的是,对于不同版本的Office或Word,可能需要调整代码以确保兼容性。...

    C#操作word文档 C#实现Word中表格信息读取

    ### 二、使用C#批量替换Word文档中的书签文本 这个示例展示了如何遍历Word文档中的所有书签,并将每个书签的文本替换为新的字符串。 #### 1. 打开文档 ```csharp object omissing = system.reflection.missing....

    C#实现对Word文档的操作

    在C#编程环境中,我们可以利用Microsoft.Office.Interop.Word库来实现对Word文档的多种操作。这个库提供了丰富的接口,使得开发者可以方便地创建、读取、更新和格式化Word文档。以下是一些关于如何使用C#进行Word...

    c#打开word文档及读取word文档

    通过以上步骤和注意事项,你可以在C#中实现打开和读取Word文档的功能。根据实际需求,你还可以扩展到编辑、保存、打印等更多操作。在实际开发中,结合具体的业务逻辑,这些知识点将帮助你构建功能完善的Word文档处理...

    C#操作word文档(多种方法)

    在C#中操作Word文档,通常使用Microsoft Office Interop库,这是一个允许.NET应用程序与Office应用程序交互的组件。以下是一些关键知识点和实现方法: 1. **引用Microsoft Word对象库**: 在C#项目中,首先需要...

    word文档合并C#实现

    本教程将探讨如何使用C#编程语言实现Word文档的合并功能,同时也会涉及到基础的读写操作。C#提供了Microsoft.Office.Interop.Word库,使得开发者可以直接与Word应用程序进行交互,执行类似于在Word中手动操作的各种...

    C#读取Word文档的技巧

    在实现C#读取Word文档时,需要使用FileStream对象来读取文本文件里的信息,但是对于Word文档来说就不能使用这样的方法了。因为Word文档是一个二进制文件,包含了许多格式和样式信息,无法使用FileStream对象来读取。...

    C#word文件文本提取

    本主题聚焦于如何使用C#从Word文档中提取文本,这在数据处理、文档分析或自动化任务中非常常见。以下是关于这个话题的详细说明。 首先,要处理Word文档,你需要使用Microsoft Office Interop库,它允许C#代码与...

    asp.net(c#).winform 读取word文档内容、创建新word文档

    本文将深入探讨如何利用C#语言在Winform中实现对Microsoft Word文档的操作,包括读取已有文档的内容以及创建新的Word文档。 一、读取Word文档内容 在C#中,可以借助Microsoft.Office.Interop.Word库来实现与Word的...

    C# HtmlToWord 将HTML文件转换成word文档

    链接如果无法本地化,可以考虑将其转换为纯文本或者在Word文档中创建超链接。 批量转换时,可以使用`System.IO.Directory`类遍历目录中的所有HTML文件,逐个进行转换。记得在转换每个文件后清理临时图片,以避免...

    c# word、txt文档文件对比(查重)

    本文将深入探讨如何使用C#语言来对比Word文档(.docx)和纯文本文件(.txt)的相似度,实现查重功能。我们将不依赖任何第三方库,完全基于C#的标准库来完成这一任务。 首先,我们要了解文件对比的基本思路。文件...

    C#Word文档操作

    本主题聚焦于如何使用C#进行Word文档的操作,并将处理后的文档以byte数组的形式保存到数据库中。这对于数据存储、备份以及跨平台传输等场景非常有用。 首先,我们需要了解如何使用C#操作Word文档。Microsoft提供了`...

    C#的在线编辑word

    本项目名为"C#的在线编辑word",显然是一个使用C#编程语言实现的Web应用程序,允许用户通过网页进行Word文档的操作。 C#是一种面向对象的编程语言,广泛应用于Windows平台和.NET框架,同时也被用在ASP.NET框架中来...

    用C#.NET实现生成PDF文档和将WORD转换为PDF

    总结来说,用C#.NET实现生成PDF文档和将WORD转换为PDF涉及到对PDF结构的理解、使用合适的库进行编程、处理WORD文档的复杂格式以及异常处理。此外,OCR技术在文档转换过程中的应用也是提高效率的关键环节。通过掌握...

    C#实现对WORD文档的操作 vs2005

    在本文中,我们将深入探讨如何使用C#在Visual Studio 2005中实现对Word文档的操作。这一主题对于那些需要自动化处理Word文档、创建报表或者进行数据导入导出的开发者来说至关重要。 首先,我们需要了解的是...

    C# 自动生成word文档

    在C#编程环境中,生成Word文档是一项常见的任务,尤其在数据报告、自动化文档生成或企业应用中。利用Microsoft Office Interop库或者第三方库,我们可以轻松地实现这一功能。以下将详细讲解如何使用C#来创建包含页眉...

    C#richTextBox显示和保存带格式的Word文档

    在C#编程中,`richtextbox`是一个常用的控件,用于显示和编辑富文本,它支持多种格式,包括字体、...通过合理使用.NET Framework提供的类库和第三方工具,我们可以轻松地实现在Windows Forms应用中处理Word文档的功能。

    C# WPF根据word模板生成word文档

    在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用时,WPF(Windows Presentation Foundation)框架为其提供了强大的UI设计能力。本主题聚焦于如何利用C# WPF结合Microsoft Office的组件来根据...

    C# 读取word文档和图片

    本知识点主要聚焦于如何使用C#来读取Word文档和图片,这对于处理文档处理和数据提取任务至关重要。在现代办公环境中,能够高效地操作Word文档和图像数据是许多应用程序的基础功能。 一、C#读取Word文档 1. **使用...

Global site tag (gtag.js) - Google Analytics