Программный поиск текста в диапазонах листов
Метод Find Range объекта позволяет искать текст в диапазоне. Этот текст также может быть любой из строк ошибок, которые могут отображаться в ячейке листа, например #NULL!
или #VALUE!
. Дополнительные сведения о строках ошибок см. в разделе "Значения ошибок ячейки".
Область применения. Сведения в этом разделе относятся к проектам уровня документа и проектам надстроек VSTO для Excel. Дополнительные сведения см. в разделе "Функции", доступные по Приложение Office ликации и типу проекта.
В следующем примере выполняется поиск диапазона с именем Fruits
и изменение шрифта для ячеек, содержащих слово apples. Эта процедура также использует FindNext метод, который использует ранее заданные параметры поиска для повторения поиска. Вы указываете ячейку, после которой выполняется поиск, а FindNext метод обрабатывает остальные.
Примечание.
Поиск FindNext метода возвращается к началу диапазона поиска после достижения конца диапазона. Код должен гарантировать, что поиск не выполняется в бесконечном цикле. В примере процедуры показан один из способов обработки этой процедуры с помощью Address[] свойства.
Поиск текста в диапазоне листов
Объявите переменные для отслеживания всего диапазона, первого найденного диапазона и текущего найденного диапазона.
Найдите первое совпадение, указав все параметры, кроме ячейки для поиска.
Продолжайте поиск до тех пор, пока есть совпадения.
Сравните первый найденный диапазон (
firstFind
) с No. ЕслиfirstFind
значение не содержится, код сохраняет найденный диапазон (currentFind
).Выйдите из цикла, если адрес найденного диапазона соответствует адресу первого найденного диапазона.
Задайте внешний вид найденного диапазона.
Выполните другой поиск.
В следующем примере показан полный метод.
Пример
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(Excel.XlReferenceStyle.xlA1)
== firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
{
break;
}
currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
currentFind.Font.Bold = true;
currentFind = Fruits.FindNext(currentFind);
}
}