Buscar y reemplazar texto en documentos mediante programación

El objeto Find es miembro de los objetos Selection y Range y puede usar cualquiera de ellos para buscar texto en documentos de Microsoft Office Word. El comando replace es una extensión del comando find.

Use un objeto Find para recorrer un documento de Microsoft Office Word y buscar un determinado texto, formato o estilo y use la propiedad Replacement para reemplazar cualquiera de los elementos encontrados.

Se aplica a: la información de este tema se aplica a proyectos de nivel de documento y proyectos de complementos de VSTO para Word. Para obtener más información, consulte Características disponibles por aplicación de Office lication y tipo de proyecto.

Usar un objeto Selection

Cuando se usa un objeto Selection para buscar texto, los criterios de búsqueda que especifique se aplicarán únicamente al texto actualmente seleccionado. Si la Selection es un punto de inserción, se buscará en el documento. Cuando se encuentra el elemento que coincide con los criterios de búsqueda, se selecciona automáticamente.

Es importante tener en cuenta que los criterios Find son acumulativos, lo que significa que se agregan a los criterios de búsqueda anteriores. Borre el formato de las búsquedas anteriores mediante el método ClearFormatting antes de hacer la búsqueda.

Para buscar texto mediante un objeto de selección

  1. Asigne una cadena de búsqueda a una variable.

    object findText = "find me";
    
  2. Borre el formato de las búsquedas anteriores.

    Application.Selection.Find.ClearFormatting();
    
  3. Ejecute la búsqueda y se mostrará un cuadro de mensaje con los resultados.

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

    En el siguiente ejemplo se muestra el método completo.

    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 un objeto Range

Los objetos Range le permiten buscar texto sin mostrar nada en la interfaz de usuario. El Find objeto devuelve True si se encuentra texto que coincide con los criterios de búsqueda y False si no lo hace. También redefine el objeto Range para que coincida con los criterios de búsqueda si se encuentra el texto.

Para buscar texto con un objeto Range

  1. Defina un objeto Range formado por el segundo párrafo del documento.

    El siguiente ejemplo de código se puede usar en una personalización de nivel de documento.

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

    El siguiente ejemplo de código se puede usar en un complemento de VSTO. En este ejemplo se usa el documento activo.

    Word.Document document = this.Application.ActiveDocument;
    Word.Range rng = document.Paragraphs[2].Range;
    
  2. Con la Find propiedad del Range objeto, borre primero las opciones de formato existentes y busque la cadena.

    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. Se mostrarán los resultados de la búsqueda en un cuadro de mensaje; seleccione Range para que sea visible.

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

    Si se produce un error en la búsqueda, se seleccionará el segundo párrafo; si se hace correctamente, se mostrarán los criterios de búsqueda.

    En el siguiente ejemplo se muestra el código completo de una personalización de nivel de documento. Para usar este ejemplo, ejecute el código desde la clase ThisDocument del proyecto.

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

En el siguiente ejemplo se muestra el código completo de un complemento de VSTO. Para usar este ejemplo, ejecute el código desde la clase ThisAddIn del proyecto.

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

Buscar y reemplazar texto en documentos

El código siguiente busca en la selección actual y reemplaza todas las apariciones de la cadena para buscarme por la cadena Encontrado.

Para buscar y reemplazar texto en documentos

  1. Agregue el siguiente código de ejemplo a la clase ThisDocument o ThisAddIn del proyecto.

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

    La clase Find tiene un método ClearFormatting y la clase Replacement también tiene su propio método ClearFormatting. Al realizar operaciones de búsqueda y reemplazo, debe usar el método ClearFormatting de ambos objetos. Si solo lo usa en el objeto Find, podría obtener resultados imprevistos en el texto de reemplazo.

  2. Use el método Execute del objeto Find para reemplazar los elementos encontrados. Para especificar qué elementos se van a reemplazar, use el parámetro Replace . Este parámetro puede ser uno de los siguientes valores WdReplace: