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


Практическое руководство. Поиск текста в документах

Обновлен: Ноябрь 2007

Применение

Сведения, приведенные в данном разделе, относятся только к указанным проектам Visual Studio Tools for Office и версиям Microsoft Office.

Тип проекта

  • Проекты уровня документа

  • Проекты уровня приложения

Версия Microsoft Office

  • Word 2003

  • Word 2007

Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов.

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

Использование объекта 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. Используя свойство 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(); 
}

Ниже приведен полный код примера для надстройки уровня приложения. Чтобы воспользоваться этим примером, запустите его из класса 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();
}

См. также

Задачи

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

Практическое руководство. Установка параметров поиска в документах Word

Практическое руководство. Элементы просмотра и поиска в документах

Практическое руководство. Определение и выделение диапазонов в документе

Практическое руководство. Восстановление выделения после поиска

Основные понятия

Общие сведения о необязательных параметрах в решениях Office