Me gustaria poder almacenar una tabla en un array matriz bidimensional y ordenar alfabeticamente el array de forma ascendente por una columna.
Es posible hacer eso utilizando los recursos y/o funciones nativas que tiene Calc?
He visto que Calc tiene funciones nativas y le puedes pasar el rango en forma de array a la funcion y te devuelve el valor que necesitas y me pregunto si existe alguna funcion nativa para ordenar en orden alfabetico. Vean el ejemplo macro "Sub numeroMayor" donde se ve
Código: Seleccionar todo
oCellRange = oSheet.getCellRangeByName("A2:A12")
arg = Array(oCellRange)
ElMayor = serFun.callFunction("Max",arg)
Print ElMayor
De momento solo he encontrato este macro que funciona y ordena la tabla de la Hoja1 alfabeticamente.
A mi me gustaria pasar mi array myTableArray() como parametro a la "Function ordenaDatos_Por1Columna"
para que estas funciones nativas ordenaran el array alfabeticamente sin ordenar el rango de la tabla de la Hoja1 al mismo tiempo.
algo como esto:
¿Se podria pasar el array matriz como Rango a alguna funcion nativa?. Solo pretendo ordenar alfabeticament un array para luego poblarlo (pegar sus valores) en otra hoja. He visto que en EXCEL existe una funcion nativa llamda ORDENARPOR, pero en Calc no la encuentro.'*** Ordenamos con los parámetros establecidos en la funcion "ordenaDatos_Por1Columna"
Rango.Sort(DescriptorOrden()) 'Este funciona.
'miArray().Sort(DescriptorOrden()) 'Este no funciona, pero seria posible pasar el array de algun modo por ejemplo asi ????
O ¿alguien sabe alguna manera de ordenar alfabeticamente un array con una macro simple?
Gracias.
Código: Seleccionar todo
Sub ordenar
'macro ordena array por una columna.
Dim oSheet as Object
Dim oCellRange as Object
Dim oRango as Object
oSheet = ThisComponent.Sheets.getByName("Hoja1")
oCellRange = oSheet.getCellRangeByName("A1:D12")
'nom = oCellRange.Name()
myTableArray = oCellRange.getDataArray()
oRango = ordenaDatos_Por1Columna(oCellRange)
Print "Fin"
End Sub
'***********************************************************
Function ordenaDatos_Por1Columna(Rango as Object) as Object
'Ordena Alfabeticamente una tabla o rango de una hoja de calc
Dim CamposOrden(0) As New com.sun.star.util.SortField 'El 0 equivale a que se ordena por 1 columna. El 1 a que se ordena por 2 columna y asi sucesivamente.
Dim DescriptorOrden(1) As New com.sun.star.beans.PropertyValue 'No se lo que es.
'Columna Coincidencias es la 1.
CamposOrden(0).Field = 3 'Es la columna por la que se ordena. El 0 es la primea, 1 es la segunda y asi sucesivamente.
CamposOrden(0).SortAscending = True 'false si quieres que sea Descending y True si quieres que sea Ascending
CamposOrden(0).FieldType = com.sun.star.table.TableSortFieldType.ALPHANUMERIC
'****** Configuració tabla o array y que tipo de orden quieres ***********
DescriptorOrden(0).Name = "ContainsHeader"
DescriptorOrden(0).Value = True 'con False No hay Cabecera o header. Poner True para cuando haya cabecera.
DescriptorOrden(1).Name = "SortFields"
DescriptorOrden(1).Value = CamposOrden()
'*** Ordenamos con los parámetros establecidos
Rango.Sort(DescriptorOrden()) 'Este funciona.
'miArray().Sort(DescriptorOrden()) 'Este no funciona, pero seria posible pasar el array de algun modo por ejemplo asi ????
ordenaDatos_Por1Columna = Rango
End Function
'******************************************
Sub numeroMayor
'*** ejemplo Funcion nativa **************
'Nos dice cual es numero mayor dentro de un rango
'Pasamos el rango como array, pero tambien podemos pasarle un array unidimensional
serFun = createUnoService("com.sun.star.sheet.FunctionAccess")
oSheet = ThisComponent.Sheets.getByIndex(0)
oCellRange = oSheet.getCellRangeByName("A2:A12")
arg = Array(oCellRange)
ElMayor = serFun.callFunction("Max",arg) 'El numero Maximo o mayor de una columna.
Print ElMayor
End Sub