Como localizar texto em intervalos de planilhas programaticamente

O método de Find do objeto de Microsoft.Office.Interop.Excel.Range permite que você procurar pelo texto dentro do intervalo.Esse texto também pode ser qualquer uma das cadeias de erro que podem aparecer em uma célula de planilha como #NULL! ou #VALUE!.Para obter mais informações sobre cadeias de erro, consulte Valores de erro da célula.

Aplicável a: As informações neste tópico se aplicam a projetos de nível de documento e projetos de nível de aplicativo para Excel 2013 e Excel 2010. Para obter mais informações, consulte Recursos disponíveis pelo aplicativo do Office e o tipo de projeto.

O exemplo a seguir procura um intervalo nomeado Fruits e altera a fonte para as células que contêm a palavra “apples”.Este procedimento também usa o método de FindNext , usando as configurações definidas anteriormente de pesquisa para repetir a pesquisa.Você especifica a célula depois do que para procurar, e o método de FindNext trata o resto.

ObservaçãoObservação

As envolve a pesquisa de método de FindNext de volta para o início do intervalo de pesquisa após alcançar o final do intervalo.Seu código deve garantir que a pesquisa não envolve ao redor em um loop infinito.O procedimento do exemplo mostra uma maneira para tratar isso usando a propriedade de Address .

link para vídeo Para uma demonstração de vídeo relacionada, consulte Como: eu faço Use o método de localização em um suplemento do excel?.

Para procurar pelo texto em uma planilha varie

  1. Declarar variáveis para controlar o intervalo inteiro, o primeiro intervalo encontrado, e o intervalo encontrado atual.

    Dim currentFind As Excel.Range = Nothing
    Dim firstFind As Excel.Range = Nothing
    
    Excel.Range currentFind = null; 
    Excel.Range firstFind = null; 
    
  2. Procure pela primeira correspondência, especificando todos os parâmetros exceto a célula para procurar em seguida.

    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); 
    
  3. Continue que procura como há correspondências.

    While Not currentFind Is Nothing
    
    while(currentFind != null) 
    
  4. Compare o primeiro intervalo encontrado ()firstFinda Nothing.Se firstFind não contém nenhum valor, o código armazena possam o intervalocurrentFindencontrado ().

    If firstFind Is Nothing Then
        firstFind = currentFind
    
    if (firstFind == null)
    {
        firstFind = currentFind; 
    }
    
  5. Sair do loop se o endereço do intervalo encontrado corresponde ao endereço do primeiro intervalo encontrado.

    ElseIf currentFind.Address = firstFind.Address Then
        Exit While
    End If
    
    else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1)
          == firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
    {
        break;
    }
    
  6. Definir a aparência do intervalo encontrado.

    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; 
    
  7. Executar outra pesquisa.

    currentFind = Fruits.FindNext(currentFind)
    
    currentFind = Fruits.FindNext(currentFind); 
    

O exemplo a seguir mostra o método completo.

Exemplo

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

Consulte também

Tarefas

Como aplicar estilos a intervalos em pastas de trabalho programaticamente

Como fazer referência a intervalos de planilhas em código programaticamente

Conceitos

Trabalhando com intervalos

Parâmetros opcionais em soluções do Office