Página 1 de 1

[RESUELTO][Calc]Ordenar alfabéticamente

NotaPublicado: Sab May 23, 2020 1:01 am
por markotxe
Buenas noche,
Llevo unos días chocando con una dificultad que puede parecer sencilla.

Estoy tratando hacer un programa destinado a gestionar las inscripciones de una sala de deporte.
Las inscripciones se hacen desde una hoja ("Inscripciones"). A partir de la cual, se reparte las personas en el grupo que le corresponden. (Existe una hoja distinta por cada grupo).
Esta etapa la tengo controlada...

Me gustaría ahora ordenar alfabéticamente las listas después de cada inscripción.
A pesar de los posts editados en este forum y las búsquedas que realice en el net, no he conseguido adaptar y/o entender soluciones.
Es el objeto de mi visita aquí.
Gracias por vuestra atención.

Todas ideas, sugestiones, pistas serán las bien venidas.

CoOOrdialmente
Marc

Re: [Calc]Ordenar alfabéticamente

NotaPublicado: Lun May 25, 2020 11:03 pm
por PepeOooSevilla
Hola.
En el módulo Module1 del archivo adjunto figura este código:

Código: Seleccionar todo   Expandir vistaContraer vista
REM  *****  BASIC  *****
Option Explicit

Sub Main()
   'Otros procesos antes de ordenar
   Call OrdenarDatos("Lista")
   Call OrdenarDatos("Lista2")
End Sub

Function UltimaFila(NombreHoja As String) As Long
   Dim Hoja As Object
   Dim Cursor As Object
   Dim DireccionRango As New com.sun.star.table.CellRangeAddress

   Hoja = ThisComponent.getSheets().getByName(NombreHoja)
   Cursor = Hoja.createCursor()
   With Cursor
      .gotoEndOfUsedArea(False)
      DireccionRango = .getRangeAddress()
   End With
   UltimaFila = DireccionRango.EndRow
End Function

Sub OrdenarDatos(NombreHoja As String)
   Dim Hoja As Object
   Dim Rango As Object
   Dim CamposOrden(1) As New com.sun.star.util.SortField
   Dim DescriptorOrden(1) As New com.sun.star.beans.PropertyValue

   Hoja = ThisComponent.getSheets().getByName(NombreHoja)
   'Rango de celdas a ordenar C5:Z#, siendo # = UltimaFila(NombreHoja)
   Rango = Hoja.getCellRangeByPosition(2, 4, 25, UltimaFila(NombreHoja))
   'APELLIDOS
   CamposOrden(0).Field = 0
   CamposOrden(0).SortAscending = True
   CamposOrden(0).FieldType = com.sun.star.table.TableSortFieldType.ALPHANUMERIC
   'NOMBRE
   CamposOrden(1).Field = 1
   CamposOrden(1).SortAscending = True
   CamposOrden(1).FieldType = com.sun.star.table.TableSortFieldType.ALPHANUMERIC
   DescriptorOrden(0).Name = "ContainsHeader"
   DescriptorOrden(0).Value = True
   DescriptorOrden(1).Name = "SortFields"
   DescriptorOrden(1).Value = CamposOrden()
   'Ordenamos con los parámetros establecidos
   Rango.Sort(DescriptorOrden())
End Sub

Al botón ORDENAR ALFABETICAMENTE de la hoja Inscripciones le he asignado la macro Main(). Haz pruebas y modifica a conveniencia.
Saludos cordiales.

Re: [RESUELTO][Calc]Ordenar alfabéticamente

NotaPublicado: Mar May 26, 2020 12:19 am
por markotxe
Hola PepeOooSevilla, hola foro,

Genial! :bravo:

He realizado una prueba rápida en el documento original y funciona muy bien. Toca ahora adaptar la solución al conjunto del archivo. Sera la parte, la mas divertida (empezando con una base solida).

Por lo tanto os dirijo un doble agradecimiento!
- Uno por la solución que me habéis facilitado.
- Dos por abrirme perspectivas de investigación. Todavía no estoy familiarizado con las funciones y me queda mucho por leer y aprender. Con este ejemplo, espero poder practicar y aprender divirtiéndome.

Muchas gracias !!!
CooOrdialmente
Marc