如何:以编程方式在文档中搜索和替换文本

Find 对象同时是 SelectionRange 对象的成员,可以使用其中任意一个对象在 Microsoft Office Word 文档中搜索文本。“替换”命令是“查找”命令的扩展。

使用 Find 对象可以遍历 Microsoft Office Word 文档来搜索特定的文本、格式设置或样式,并使用 Replacement 属性替换找到的所有项。

**适用于:**本主题中的信息适用于 Word 2013 和 Word 2010 的文档级项目和应用程序级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

使用 Selection 对象

使用 Selection 对象查找文本时,指定的所有搜索条件只适用于当前选择的文本。如果 Selection 是插入点,则搜索整个文档。找到与搜索条件匹配的项时,将自动选定该项。

需要注意的是,Find 条件是累积的,这意味着条件会与前面的搜索条件叠加起来。搜索前,可使用 ClearFormatting 方法清除以前搜索的格式设置。

使用 Selection 对象查找文本

  1. 将搜索字符串分配给变量。

    Dim findText As String = "find me"
    
    object findText = "find me";
    
  2. 清除以前搜索的格式设置。

    Application.Selection.Find.ClearFormatting()
    
    Application.Selection.Find.ClearFormatting();
    
  3. 执行搜索并显示一个包含结果的消息框。

    If Application.Selection.Find.Execute(findText) = True Then
        MessageBox.Show("Text found.")
    Else
        MessageBox.Show("The text could not be located.")
    End If
    
    if (Application.Selection.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing)) 
    { 
        MessageBox.Show("Text found.");
    } 
    else
    { 
        MessageBox.Show("The text could not be located.");
    } 
    

下面的示例演示完整的方法。

Private Sub SelectionFind()
    Dim findText As String = "find me"

    Application.Selection.Find.ClearFormatting()

    If Application.Selection.Find.Execute(findText) = True Then
        MessageBox.Show("Text found.")
    Else
        MessageBox.Show("The text could not be located.")
    End If
End Sub
private void SelectionFind() 
{ 
    object findText = "find me";

    Application.Selection.Find.ClearFormatting();

    if (Application.Selection.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing)) 
    { 
        MessageBox.Show("Text found.");
    } 
    else
    { 
        MessageBox.Show("The text could not be located.");
    } 
}

使用 Range 对象

使用 Range 对象,您将能够搜索文本,同时在用户界面中不显示任何内容。如果找到与搜索条件匹配的文本,Find 对象将返回 True;否则将返回 False。如果找到了文本,该对象还会重新定义 Range 对象以匹配搜索条件。

使用 Range 对象查找文本

  1. 定义一个由文档的第二段组成的 Range 对象。

    下面的代码示例可用于文档级自定义项。

    Dim rng As Word.Range = Me.Paragraphs(2).Range
    
    Word.Range rng = this.Paragraphs[2].Range; 
    

    下面的代码示例可用于应用程序级外接程序。此示例使用活动文档。

    Dim rng As Word.Range = Me.Application.ActiveDocument.Paragraphs(2).Range
    
    Word.Document document = this.Application.ActiveDocument;
    Word.Range rng = document.Paragraphs[2].Range;
    
  2. 使用 Range 对象的 Find 属性,首先清除所有现有的格式设置选项,然后搜索字符串 find me。

    rng.Find.ClearFormatting()
    
    If rng.Find.Execute(findText) Then
    
    rng.Find.ClearFormatting();
    
    if (rng.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing)) 
    { 
    
  3. 在消息框中显示搜索结果,并选择 Range 以使其可见。

        MessageBox.Show("Text found.")
    Else
        MessageBox.Show("Text not found.")
    End If
    
    rng.Select()
    
        MessageBox.Show("Text found.");
    } 
    else 
    { 
        MessageBox.Show("Text not found.");
    } 
    
    rng.Select(); 
    

    如果搜索失败,则第二段被选中;如果搜索成功,则显示搜索条件。

下面的示例显示了文档级自定义项的完整代码。若要使用此示例,请从项目内的 ThisDocument 类中运行代码。

Private Sub RangeFind()
    Dim findText As String = "find me"

    Dim rng As Word.Range = Me.Paragraphs(2).Range

    rng.Find.ClearFormatting()

    If rng.Find.Execute(findText) Then
        MessageBox.Show("Text found.")
    Else
        MessageBox.Show("Text not found.")
    End If

    rng.Select()
End Sub
private void RangeFind() 
{ 
    object findText = "find me";

    Word.Range rng = this.Paragraphs[2].Range; 

    rng.Find.ClearFormatting();

    if (rng.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing)) 
    { 
        MessageBox.Show("Text found.");
    } 
    else 
    { 
        MessageBox.Show("Text not found.");
    } 

    rng.Select(); 
}

下面的示例显示了应用程序级外接程序的完整代码。若要使用此示例,请从项目内的 ThisAddIn 类中运行代码。

Private Sub RangeFind()
    Dim findText As Object = "find me"

    Dim rng As Word.Range = Me.Application.ActiveDocument.Paragraphs(2).Range

    rng.Find.ClearFormatting()

    If rng.Find.Execute(findText) Then
        MessageBox.Show("Text found.")
    Else
        MessageBox.Show("Text not found.")
    End If

    rng.Select()
End Sub
private void RangeFind()
{
    object findText = "find me";

    Word.Document document = this.Application.ActiveDocument;
    Word.Range rng = document.Paragraphs[2].Range;

    rng.Find.ClearFormatting();

    if (rng.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing))
    {
        MessageBox.Show("Text found.");
    }
    else
    {
        MessageBox.Show("Text not found.");
    }

    rng.Select();
}

搜索和替换文本文档

以下代码搜索当前的选定内容,并将出现的所有 find me 字符串替换为 Found 字符串。

若要搜索和替换文本文档

  1. 添加下面的代码示例添加到项目的 ThisDocument 或 ThisAddIn 选件类。

    Private Sub SearchReplace()
        Dim FindObject As Word.Find = Application.Selection.Find
        With FindObject
            .ClearFormatting()
            .Text = "find me"
            .Replacement.ClearFormatting()
            .Replacement.Text = "Found"
            .Execute(Replace:=Word.WdReplace.wdReplaceAll)
        End With
    End Sub
    
    private void SearchReplace()
    {
        Word.Find findObject = Application.Selection.Find;
        findObject.ClearFormatting();
        findObject.Text = "find me";
        findObject.Replacement.ClearFormatting();
        findObject.Replacement.Text = "Found";
    
        object replaceAll = Word.WdReplace.wdReplaceAll;
        findObject.Execute(ref missing, ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing, ref missing,
            ref replaceAll, ref missing, ref missing, ref missing, ref missing);
    }
    

    Find 类有一个 ClearFormatting 方法,Replacement 类也有自己的 ClearFormatting 方法。执行查找和替换操作时,必须使用这两个对象的 ClearFormatting 方法。如果仅对 Find 对象使用该方法,文本替换的结果可能会无法预料。

  2. 使用 Find 对象的 Execute 方法替换每个找到的项。若要指定要替换的项,请使用 Replace 参数。此参数可为下列 WdReplace 值之一:

请参见

任务

如何:以编程方式在 Word 中设置搜索选项

如何:以编程方式遍历在文档中找到的项

如何:以编程方式在文档中定义和选择范围

如何:以编程方式在搜索后还原选定内容

概念

Office 解决方案中的可选参数