Como expandir o cursor e excluir a seleção de uma linha a partir de uma pesquisa usando SearchDescriptor?

Estou com uma dificuldade em entender como faço para excluir uma determinada linha de uma planilha, a qual é determinada pela pesquisa específica de um texto.

Na planilha exemplo, eu busco uma dado texto que, ao ser encontrado, o cursor seleciona a célula da tabela que contém o texto.

A minha ideia, que tentei escrever de várias maneiras, é a partir da célula selecionada, o cursor se expandir pela linha, e excluir ela, tudo de maneira automatizada.

Tenho lido bastante os Livros de Andrew Pitonyak e Maurizio Baeza para entender melhor o funcionamento do que desejo, mas tenho tido um pouco de dificuldade. Inclusive, tenho estudado utilizando exemplos dos próprios autores.

Para entender melhor:

  1. Buscar por uma palavra determinada
  2. Ao focar na célula que retorna a pesquisa, expandir o cursor para toda linha
  3. Excluir a linha selecionada

Option Explicit
Sub SearchAndKill()
Dim oSheet as Object : oSheet = ThisComponent.getCurrentController().getActiveSheet()
Dim oRange as Object : oRange = oSheet.getCellRangeByName( “A1:D19” )
Dim oSelection as Object :oSelection = ThisComponent.getCurrentSelection()
Dim oRows as Object : oRow=oSelection.Rows
Dim SearchDesc as Object : SearchDesc = oSheet.createSearchDescriptor
Dim oCursor as Object
Dim wordFound as Object
Dim rowToKill as Object
With SearchDesc
.searchWords = True
.searchCaseSensitive = False
.setSearchString( “antonio” )
End with
wordFound = oRange.findFirst( SearchDesc )
If Not IsNull( wordFound ) Then
ThisComponent.getCurrentController.select( wordFound )
Else
MsgBox (“Não encontrado.”)
End If
End Sub

Segue arquivo exemplo:
arquivoexemplo.ods (16,0,KB)

Vai deletar a primeira encontrada, a linha em toda a extensão da planilha.

Option Explicit
Sub SearchAndKill()
Dim oSheet as Object : oSheet = ThisComponent.getCurrentController().getActiveSheet()
Dim oRange as Object : oRange = oSheet.getCellRangeByName( “A1:D19” )
Dim oSelection as Object :oSelection = ThisComponent.getCurrentSelection()
Dim oRows as Object : oRow=oSelection.Rows
Dim SearchDesc as Object : SearchDesc = oSheet.createSearchDescriptor
Dim oCursor as Object
Dim wordFound as Object
Dim rowToKill as Object
With SearchDesc
.searchWords = True
.searchCaseSensitive = False
.setSearchString( “antonio” )
End with
wordFound = oRange.findFirst( SearchDesc )
If Not IsNull( wordFound ) Then
ThisComponent.getCurrentController.select( wordFound )
Else
MsgBox (“Não encontrado.”)

	Execute "DeleteRows", 1 

End If
End Sub



'SubMacro
Sub Execute ( oQue$, Optional nQtd% )
Dim Exec(1) as new com.sun.star.beans.PropertyValue
Exec(0).Name = "By" : Exec(0).Value = nQtd
Exec(1).Name = "Sel" : Exec(1).Value = false
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController _
.Frame, ".uno:" & oQue & "", "", 0, Exec())
End Sub
1 Like

Muito obrigado amado!

Nem me toquei que eu poderia invocar uma função para isso.

Aproveitando o ensejo, sem necessariamente abrir outro tópico, eu tenho como inserir uma variável que armazena um conjunto dentro da propriedade da variável SearchDesc, como p. Ex.:

With SearchDesc
.searchWords = True
.searchCaseSensitive = False
.setSearchString( ARRAY () )
End with

Pergunto porque a ideia é usar o método findAll (e não findFirst).

Quando tentei fazer isso para um conjunto de palavras, deu erro.

Oi @FelipeAle, sinto não poder te ajudar, não sou programador, o pouco que sei foi usando o Gravador de macros e pesquisando na internet.

Crie um tópico novo.

Tudo bem, obrigado!