Pergunte aqui
0

Como limpar o autofiltro no Calc utilizando LibO Basic?

perguntadas 2019-06-09 20:54:52 +0200

imagem do gravatar de rebr

updated 2019-06-09 22:25:47 +0200

Preciso limpar o autofiltro utilizado em pasta do Calc utilizando macros do LibreOffice Basic. Cheguei à seguinte proposta:

sub LimpaAutoFiltro
  Dim oSheet          ' Sheet to filter.
  Dim oFilterDesc     ' Filter descriptor.
  oSheet = ThisComponent.getSheets().getByIndex(0)
  oFilterDesc = oSheet.createFilterDescriptor(True)
  oSheet.filter(oFilterDesc)
end sub

Ocorre que, após o uso do código supra, o LibO Calc continua com o autofiltro ligado, como se estivesse operando na Coluna F [mero descritivo] e com a aplicação dos filtros ali realizados, ainda que tenha feito uma "limpeza" no resultado, isto é, de fato não está aplicado o autofiltro [após o código supra].

Preciso de uma solução mais limpa, que dê o efeito de ZERAR os autofiltros. Alguém tem uma ideia?

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

0

respondidas 2019-06-09 21:39:21 +0200

Ola @rebr, usei o gravador de macro, ela alterna entre ligado e desligado.

sub AutoFiltroSN
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$D$1"   REM Uma célula da área a incluir ou excluir o Autofiltro.
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
dispatcher.executeDispatch(document, ".uno:DataFilterAutoFilter", "", 0, Array())
end sub

ATENÇÂO:: Caso queira dar mais detalhes a sua pergunta, use Descrição da imagem na pergunta ou Descrição da imagem abaixo. Grato.

Caso a resposta atendeu sua necessidade, por gentileza, click na bolinha Descrição da imagem a esquerda da resposta, para finalizar a pergunta.

editar assinalar como ofensivo Excluir Link mais

Comentários

Obrigado pelo norte! Não tinha utilizado o gravador de macros porque estou entrando agora no mundo do Basic (saindo do VBA do Excel) e quero desenvolver códigos mais limpos sem esse tal de dispatcher que o gravador usa.

Para efeitos do que eu estava precisando pra minha planilha, precisava apenas manter a possibilidade de aplicação de autofiltros para quem quer que use a planilha tenha a facilidade sem precisar entender o que é "autofiltro" e não precisar ficar procurando isso nos menus.

Então para fazer o efeito de que preciso, me usando da tua ideia, o código ficou assim:

sub AutoFiltroSN
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dispatcher.executeDispatch(document, ".uno:DataFilterAutoFilter", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:DataFilterAutoFilter", "", 0, Array())
end sub
imagem do gravatar de rebrrebr ( 2019-06-09 21:57:34 +0200 )editar

Ok desta maneira, o cursor deve estar na área da tabela a aplicar o Autofiltro.e retire uma linha duplicada...

.

Aqui links para material sobre Basic: https://ask.libreoffice.org/pt-br/que...

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2019-06-09 22:18:41 +0200 )editar

A linha duplicada é, na verdade, para DESABILITAR o Autofiltro e depois REabilitar. ;)

imagem do gravatar de rebrrebr ( 2019-06-09 22:21:09 +0200 )editar

Ok, perfeito, limpa e reativa o Autofiltro.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2019-06-09 22:23:29 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2019-06-09 20:54:52 +0200

Lidas: 10 vezes

Última atualização: Jun 09