Página 1 de 1

Ayuda con Calc, ordenar numéricamente hojas exc. 2 primeras

Publicado: Jue May 28, 2020 7:58 pm
por eonybor
Buenas tardes,
Por favor, necesito ordenar una serie de hojas en Calc y ese orden tiene que ser numérico, sin tener en cuenta las dos primeras hojas del libro. Hay alguna manera?, si es así, cuáles son los pasos a seguir?
Muchas gracias

Re: Ayuda con Calc, ordenar numéricamente hojas exc. 2 prime

Publicado: Jue May 28, 2020 8:20 pm
por PepeOooSevilla
Hola.
Te damos la bienvenida al Foro y, por favor, no dejes de leer la Guía de supervivencia.

Tienes que dar más información:
* ¿Quieres ordenar de una sola vez todas las hojas excepto las dos primeras?
* ¿Todas las hojas excepto las dos primeras tienen la misma estructura?
* ¿Por qué columna (o campo) se ordenaría? ¿Es igual para todas o cambia según la hoja a ordenar?
* ...

¿Podrías subir un archivo de ejemplo? Si no sabes cómo subir un archivo, consulta Cómo adjuntar un archivo.
Ese archivo de ejemplo no tiene por qué ser "el archivo original", ni contener cientos de filas y columnas pero sí debe tener unos mínimos datos (ficticios, que este es un Foro público) con los que poder calcular y el "formato original" para saber cómo están distribuidos esos datos. Todo esto ayuda a los voluntarios que formamos este Foro para que podamos ofrecerte una mejor solución.
Saludos cordiales.

Re: Ayuda con Calc, ordenar numéricamente hojas exc. 2 prime

Publicado: Vie May 29, 2020 6:49 am
por eonybor
Buenos días,
* Sí, la intención es ordenar de una sola vez todas las hojas excepto las dos primeras
* Todas las hojas excepto las dos primeras tienen la misma estructura y se deben de ordenar numéricamente, en orden descendente, las referencias de las hojas (cada pestaña), por ejemplo son: 205, 206, 208, y así sucesivamente
* Se deben de ordenar por número de hoja (exceptuando las dos primeras que deben de ir fijas) en orden descendente, por ejemplo: 210, 208, 206...
Muchas gracias

Re: Ayuda con Calc, ordenar numéricamente hojas exc. 2 prime

Publicado: Vie May 29, 2020 12:44 pm
por PepeOooSevilla
Hola.
Adjunto un ejemplo con una de las posibles soluciones. Este es el código:

Código: Seleccionar todo

REM  *****  BASIC  *****
Option Explicit

Sub OrdenarHojas()
	Dim DocCalc As Object
	Dim NumHojas As Integer
	Dim Contador As Integer
	Dim NombreHojasEnNumero() As Variant 
	
	DocCalc = ThisComponent.getSheets()
	With DocCalc
		NumHojas = .Count
		' Las 2 primeras no se cuentan. Se empieza por 0
		Redim NombreHojasEnNumero(NumHojas-3)
		For Contador = 2 To NumHojas-1
			NombreHojasEnNumero(Contador-2) = Val(.getByIndex(Contador).getName())
		Next Contador
		'MsgBox NumHojas
		'MsgBox Join(NombreHojasEnNumero(), Chr(10))
		Call OrdenarVectorNumerico(NombreHojasEnNumero())
		'MsgBox Join(NombreHojasEnNumero(), Chr(10))
		For Contador = 0 to UBound(NombreHojasEnNumero())
			.moveByName(CStr(NombreHojasEnNumero(Contador)), Contador+2)
		Next Contador
	End With
End Sub

Sub OrdenarVectorNumerico(Vector() As Variant)
	Dim iMin As Long
	Dim iMax As Long
	Dim Vectemp As Long
	Dim Pos As Long
	Dim i As Long

	iMin = LBound(Vector())
	iMax = UBound(Vector())

	Do While iMax > iMin
		Pos = iMin
		For i = iMin To iMax - 1
			If Vector(i) < Vector(i + 1) Then 'orden descendente
			Vectemp = Vector(i + 1)
			Vector(i + 1) = Vector(i)
			Vector(i) = Vectemp
			Pos = i
			End If
		Next i
		iMax = Pos
	Loop
End Sub
Las dos primeras hojas no se mueven de sitio, el resto se ordena de mayor a menor (orden descendente). Se presupone que los nombres de las hojas son números. Las dos primeras no se tienen en cuenta. Para ordenar las hojas pincha en Herramientas > Macros > Ejecutar macro... y selecciona la macro OrdenarHojas.
Las macros no son fáciles pero si te interesa la programación para OpenOffice/LibreOffice tienes que leer y estudiar el libro Aprendiendo OOo Basic de nuestro compañero mauricio. También lo puedes consultar aquí: Guía de introducción al uso de Apache OpenOffice > Temas Avanzados > Macros > StarBasic.
Saludos cordiales.