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çã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 . |
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
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;
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);
Continue que procura como há correspondências.
While Not currentFind Is Nothing
while(currentFind != null)
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; }
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; }
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;
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