Руководство. Программный поиск и замена текста в документах

Объект Find является членом объектов Selection и Range, каждый из которых можно использовать для поиска текста в документах Microsoft Office Word. Команда замены является расширением команды поиска.

С помощью объекта Find можно выполнять операцию перебора документа Microsoft Office Word и поиска конкретного текста, форматирования или стиля, а свойство Replacement можно использовать для замены всех найденных элементов.

Применимо к: Сведения в этом разделе относятся к - проектам уровня документа и добавлению VSTO - в проектах для Word. Дополнительные сведения см. в разделе доступность функций по типам приложений 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;
    

    Следующий пример кода можно использовать в надстройке VSTO. В этом примере используется активный документ.

    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. С помощью Find свойства Range объекта сначала очистите все существующие параметры форматирования, а затем найдите строку 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(); 
    }
    

    В следующем примере показан полный код для надстройки VSTO. Чтобы использовать этот пример, запустите код из класса 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 найденной строкой.

Поиск и замена текста в документах

  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. При выполнении операций Find-and-Replace необходимо использовать метод Клеарформаттинг обоих объектов. Если его использовать только на объекте Find, то при замене текста можно получить непредвиденные результаты.

  2. Для замены каждого найденного элемента используйте метод Execute объекта Find. Чтобы указать, какие элементы следует заменить, используйте параметр Replace . Этот параметр может принимать одно из следующих значений WdReplace:

    • wdReplaceAll заменяет все найденные элементы.

    • wdReplaceNone не заменяет никакие найденные элементы.

    • wdReplaceOne заменяет первый найденный элемент.

См. также раздел