Поделиться через


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

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

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

Область применения. Сведения в этом разделе относятся к проектам уровня документа и проектам надстроек VSTO для Word. Дополнительные сведения см. в разделе "Функции", доступные по Приложение Office ликации и типу проекта.

Использование объекта Selection

При использовании объекта Selection для поиска текста все заданные условия применяются только для поиска текущего выделенного текста. Если точкой вставки является Selection, то поиск выполняется по документу. Если будет найден элемент, соответствующий условиям поиска, он будет автоматически выделен.

Следует отметить, что условия Find являются накопительными. Это означает, что условия добавляются к предыдущим условиям поиска. Для сброса форматирования из предыдущих операций поиска перед выполнением нового поиска используйте метод ClearFormatting.

Поиск текста с помощью объекта Selection

  1. Назначьте переменной строку поиска.

    object findText = "find me";
    
  2. Сбросьте форматирование из предыдущих операций поиска.

    Application.Selection.Find.ClearFormatting();
    
  3. Выполните поиск и отобразите окно сообщения с результатами.

    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 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, состоящий из второго абзаца в документе.

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

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

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

    Word.Document document = this.Application.ActiveDocument;
    Word.Range rng = document.Paragraphs[2].Range;
    
  2. Find Используя свойство 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)) 
    {
    
  3. Отобразите результаты поиска в окне сообщения и выберите Range, чтобы сделать его видимым.

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

    Если поиск заканчивается неудачно, выбирается второй абзац. При успешном выполнении поиска отображаются условия поиска.

    В следующем примере показан полный код для настройки на уровне документа. Чтобы использовать этот пример, запустите код из класса ThisDocument в своем проекте.

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

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

Следующий код выполняет поиск по текущему выбору и заменяет все вхождения строки , найдя меня строкой Found.

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

  1. Добавьте следующий пример кода в класс ThisDocument или ThisAddIn в своем проекте.

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

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

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

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