Como: Pesquisar e substituir texto de forma programática em documentos

o Find objeto é um membro dos Selection objetos e e Range você pode usar qualquer um para pesquisar texto em Microsoft Office documentos do Word. O comando Replace é uma extensão do comando find.

use um Find objeto para executar um loop em um Microsoft Office documento do Word e pesquisar texto, formatação ou estilo específicos e usar a Replacement propriedade para substituir qualquer um dos itens encontrados.

Aplica-se a: As informações neste tópico aplicam-se aos projetos de nível de documento - e ao VSTO Add - in Projects for Word. Para obter mais informações, consulte recursos disponíveis por aplicativo do Office e tipo de projeto.

Usar um objeto de seleção

Quando você usa um Selection objeto para localizar texto, os critérios de pesquisa especificados são aplicados somente no texto atualmente selecionado. Se Selection for um ponto de inserção, o documento será pesquisado. Quando o item que corresponde aos critérios de pesquisa é encontrado, ele é selecionado automaticamente.

É importante observar que os Find critérios são cumulativos, o que significa que os critérios são adicionados aos critérios de pesquisa anteriores. Limpar a formatação de pesquisas anteriores usando o ClearFormatting método anterior à pesquisa.

Para localizar texto usando um objeto de seleção

  1. Atribua uma cadeia de caracteres de pesquisa a uma variável.

    Dim findText As String = "find me"
    
    object findText = "find me";
    
  2. Limpar formatação de pesquisas anteriores.

    Application.Selection.Find.ClearFormatting()
    
    Application.Selection.Find.ClearFormatting();
    
  3. Execute a pesquisa e exiba uma caixa de mensagem com os resultados.

    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.");
    }
    

    O exemplo a seguir mostra o método Complete.

    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.");
        } 
    }
    

Usar um objeto Range

O uso de um Range objeto permite Pesquisar texto sem exibir nada na interface do usuário. O Find objeto retornará true se for encontrado texto que corresponde aos critérios de pesquisa e false se não. Ele também redefine o Range objeto para corresponder aos critérios de pesquisa se o texto for encontrado.

Para localizar texto usando um objeto Range

  1. Defina um Range objeto que consiste no segundo parágrafo do documento.

    O exemplo de código a seguir pode ser usado em uma personalização em nível de documento.

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

    o exemplo de código a seguir pode ser usado em um suplemento VSTO. Este exemplo usa o documento ativo.

    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. Usando a Find Propriedade do Range objeto, primeiro desmarque todas as opções de formatação existentes e, em seguida, procure a cadeia de caracteres Localize-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. Exiba os resultados da pesquisa em uma caixa de mensagem e selecione o Range para torná-lo visível.

        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();
    

    Se a pesquisa falhar, o segundo parágrafo será selecionado; Se tiver sucesso, os critérios de pesquisa serão exibidos.

    O exemplo a seguir mostra o código completo de uma personalização em nível de documento. Para usar este exemplo, execute o código da ThisDocument classe em seu projeto.

    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(); 
    }
    

    o exemplo a seguir mostra o código completo de um suplemento VSTO. Para usar este exemplo, execute o código da ThisAddIn classe em seu projeto.

    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();
    }
    

Pesquisar e substituir texto em documentos

O código a seguir pesquisa a seleção atual e substitui todas as ocorrências da cadeia de caracteres, encontre-me com a cadeia de caracteres encontrada.

Para pesquisar e substituir texto em documentos

  1. Adicione o seguinte código de exemplo à ThisDocument ThisAddIn classe ou em seu projeto.

    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);
    }
    

    A Find classe tem um ClearFormatting método e a Replacement classe também tem seu próprio ClearFormatting método. Ao executar operações de localizar e substituir, você deve usar o método ClearFormatting de ambos os objetos. Se você usá-lo somente no Find objeto, poderá obter resultados imprevistos no texto de substituição.

  2. Use o Execute método do Find objeto para substituir cada item encontrado. Para especificar quais itens substituir, use o parâmetro replace . Esse parâmetro pode ser um dos seguintes WdReplace valores:

Confira também