Практическое руководство. Поиск текста в диапазонах ячеек на листе
Обновлен: Ноябрь 2007
Применение |
---|
Сведения, приведенные в данном разделе, относятся только к указанным проектам Visual Studio Tools for Office и версиям Microsoft Office. Тип проекта
Версия Microsoft Office
Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов. |
Метод Find объекта Microsoft.Office.Interop.Excel.Range позволяет выполнить поиск текста внутри диапазона. Этот текст также может быть любой строкой ошибки, которая может появляться в ячейке листа, например #NULL! или #VALUE!. Дополнительные сведения о строках ошибок см. в разделе Значения ошибок для ячеек.
Приведенный ниже пример выполняет поиск в диапазоне с именем Fruits и изменяет параметры шрифта ячеек, которые содержат слово "apples". В этой процедуре также вызывается метод FindNext, который использует предыдущий набор настроек повторения поиска. Указывается ячейка, после которой начинать поиск, и метод FindNext анализирует оставшуюся часть диапазона.
Примечание. |
---|
После достижения конца диапазон метод FindNext продолжает поиск с его начала. Код должен не допустить вход в бесконечный цикл. В этом примере показан один из способов решения этой задачи — с помощью свойства Address. |
Выполнение поиска текста в диапазоне ячеек на листе
Объявить переменные для хранения первого найденного диапазона и текущего найденного диапазона.
Dim currentFind As Excel.Range = Nothing Dim firstFind As Excel.Range = Nothing
Excel.Range currentFind = null; Excel.Range firstFind = null;
Выполнить первый поиск, указав все параметры, кроме ячейки, после которой следует искать.
currentFind = Fruits.Find("apples", , _ Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, _ Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)
currentFind = Fruits.Find("apples", missing, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false, missing, missing);
Продолжать поиск, пока есть совпадения.
While Not currentFind Is Nothing
while(currentFind != null)
Сравнить первый найденный диапазон (firstFind) с Nothing. Если переменная firstFind не содержит значения, сохранить в ней найденный диапазон (currentFind).
If firstFind Is Nothing Then firstFind = currentFind
if (firstFind == null) { firstFind = currentFind; }
Выйти из цикла, если адрес найденного диапазона совпадает с адресом первого найденного диапазона.
ElseIf currentFind.Address = firstFind.Address Then Exit While End If
else if (currentFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing) == firstFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing)) { break; }
Изменить внешний вид найденного диапазона.
With currentFind.Font .Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red) .Bold = True End With
currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red); currentFind.Font.Bold = true;
Выполнить следующий поиск.
currentFind = Fruits.FindNext(currentFind)
currentFind = Fruits.FindNext(currentFind);
Ниже приведен полный пример.
Пример
Private Sub DemoFind()
Dim currentFind As Excel.Range = Nothing
Dim firstFind As Excel.Range = Nothing
Dim Fruits As Excel.Range = Me.Application.Range("A1", "B2")
' You should specify all these parameters every time you call this method,
' since they can be overridden in the user interface.
currentFind = Fruits.Find("apples", , _
Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, _
Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)
While Not currentFind Is Nothing
' Keep track of the first range you find.
If firstFind Is Nothing Then
firstFind = currentFind
' If you didn't move to a new range, you are done.
ElseIf currentFind.Address = firstFind.Address Then
Exit While
End If
With currentFind.Font
.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)
.Bold = True
End With
currentFind = Fruits.FindNext(currentFind)
End While
End Sub
private void DemoFind()
{
Excel.Range currentFind = null;
Excel.Range firstFind = null;
Excel.Range Fruits = Application.get_Range("A1", "B3");
// You should specify all these parameters every time you call this method,
// since they can be overridden in the user interface.
currentFind = Fruits.Find("apples", missing,
Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart,
Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
missing, missing);
while(currentFind != null)
{
// Keep track of the first range you find.
if (firstFind == null)
{
firstFind = currentFind;
}
// If you didn't move to a new range, you are done.
else if (currentFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing)
== firstFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing))
{
break;
}
currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
currentFind.Font.Bold = true;
currentFind = Fruits.FindNext(currentFind);
}
}
См. также
Задачи
Практическое руководство. Применение стилей к диапазонам в рабочих книгах
Практическое руководство. Ссылки на диапазоны листов в коде
Основные понятия
Общие сведения о необязательных параметрах в решениях Office