[RESUELTO][Calc]Ordenar alfabéticamente

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
markotxe
Mensajes: 27
Registrado: Jue May 02, 2019 9:47 am

[RESUELTO][Calc]Ordenar alfabéticamente

Mensaje 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
Adjuntos
Ordenar alfabeticamente.ods
(20.02 KiB) Descargado 248 veces
Última edición por markotxe el Mar May 26, 2020 1:29 am, editado 2 veces en total.
OpenOffice 4.1.5 CALC, Window10
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: [Calc]Ordenar alfabéticamente

Mensaje por PepeOooSevilla »

Hola.
En el módulo Module1 del archivo adjunto figura este código:

Código: Seleccionar todo

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.
Adjuntos
Ordenar alfabeticamente_markotxe.ods
LibO Calc 6.3.6
(32.23 KiB) Descargado 246 veces
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
markotxe
Mensajes: 27
Registrado: Jue May 02, 2019 9:47 am

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

Mensaje 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
OpenOffice 4.1.5 CALC, Window10
Responder