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


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

Метод Find Range объекта позволяет искать текст в диапазоне. Этот текст также может быть любой из строк ошибок, которые могут отображаться в ячейке листа, например #NULL! или #VALUE!. Дополнительные сведения о строках ошибок см. в разделе "Значения ошибок ячейки".

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

В следующем примере выполняется поиск диапазона с именем Fruits и изменение шрифта для ячеек, содержащих слово apples. Эта процедура также использует FindNext метод, который использует ранее заданные параметры поиска для повторения поиска. Вы указываете ячейку, после которой выполняется поиск, а FindNext метод обрабатывает остальные.

Примечание.

Поиск FindNext метода возвращается к началу диапазона поиска после достижения конца диапазона. Код должен гарантировать, что поиск не выполняется в бесконечном цикле. В примере процедуры показан один из способов обработки этой процедуры с помощью Address[] свойства.

Поиск текста в диапазоне листов

  1. Объявите переменные для отслеживания всего диапазона, первого найденного диапазона и текущего найденного диапазона.

    Excel.Range currentFind = null; 
    Excel.Range firstFind = null;
    
  2. Найдите первое совпадение, указав все параметры, кроме ячейки для поиска.

    currentFind = Fruits.Find("apples", missing,
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
        missing, missing);
    
  3. Продолжайте поиск до тех пор, пока есть совпадения.

    while(currentFind != null)
    
  4. Сравните первый найденный диапазон (firstFind) с No. Если firstFind значение не содержится, код сохраняет найденный диапазон (currentFind).

    if (firstFind == null)
    {
        firstFind = currentFind; 
    }
    
  5. Выйдите из цикла, если адрес найденного диапазона соответствует адресу первого найденного диапазона.

    else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1)
          == firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
    {
        break;
    }
    
  6. Задайте внешний вид найденного диапазона.

    currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
    currentFind.Font.Bold = true;
    
  7. Выполните другой поиск.

    currentFind = Fruits.FindNext(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); 
        }
    }