Olá gurus.
Eu utilizo em uma planilha o recurso de ORDEM NATURAL disponibilizado no CALC.
Esse tipo de ordenação cria a seguinte Ordem, muito útil quando se trabalha com códigos (de mercadoria, de itens, contábeis, etc)
121
121.1
121.1.1
121.1.2
121A.1
121A.2
122
1000.1.A
....
Porém, quando se quer usar esse tipo de ordem por meio de macros, o melhor que consegui criar foi esse código:
Sub OrdemNatural
Doc = ThisComponent
' Cria Chave
'Plan = Doc.CurrentController.ActiveSheet()
Plan = Doc.Sheets.GetbyName("Crimes")
Cods = Plan.GetCellRangeByName("A2:A816").getDataArray()
Bloco = Plan.GetCellRangeByName("A1:D816")
' Insere a Chave na coluna adicional
For x = 0 to uBound(Cods)
Plan.GetCellRangeByName("D"&4+x).value = CInt(Cods(x)(0))
Next
'Campos(x) = Serão usadas X colunas como Chaves
'SortDesc(x) = Serão estabelecidos 2 Parâmetros de Ordenação
Dim Campos(2) As New com.sun.star.util.SortField
Dim SortDesc(2) As New com.sun.star.beans.PropertyValue
' Primeira Chave (A chave criada = COLUNA D) - Ascendente
Campos(0).Field = 3
Campos(0).SortAscending = True
' Segunda Chave - Código Humano (Coluna A)- Ascendente
Campos(1).Field = 0
Campos(1).SortAscending = True
' Parâmetros do Descritor
' Campos a considerar
SortDesc(0).Name = "SortFields"
SortDesc(0).Value = Campos()
' Contem cabeçalho
SortDesc(1).Name = "ContainsHeader"
SortDesc(1).Value = True
' Realizar Ordenação
Bloco.Sort(SortDesc())
' Limpa Coluna da chave
Plan.GetCellRangeByName("D4:D" & x+3 ).ClearContents(1+4)
end sub
Ocorre que, assim, é necessário criar uma coluna adicional para que o Ordenador faça a filtragem numérica primeiro. Mas nesse caso, dependendo do número de dados que se está ordenando, ou do tamanho da planilha como um todo, o processo pode se tornar BEM demorado.
Tentei, intuitivamente, um SortDesc(2).Name = "NaturalSort"
mas não funcionou.
Sei que usando as rotinas UNO dá pra fazer, e de fato fiz, mas daí o código fica um pouco poluído, e queria evitá-lo.
Alguém tem uma solução, ou sabe se o recurso SORT()
possui algum parâmetro para isso?