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

¿Nuevo en Apache OpenOffice? ¿No sabe cómo comenzar o dónde hacer su pregunta? ¡Este es el lugar!
Reglas del Foro
Los moderadores podrían mover los temas creados aquí a un foro más apropiado.
Si usted publicó aquí y no encuentra el tema, puede buscar sus mensajes haciendo clic en la opción «Buscar sus mensajes» que se encuentra justo debajo de la cabecera de la página, junto al panel de control de usuario y al acceso a sus mensajes privados.
Responder
eonybor
Mensajes: 2
Registrado: Jue May 28, 2020 7:52 pm

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

Mensaje 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
OpenOffice 3.1 en Windows Vista
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

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

Mensaje 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.
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.
eonybor
Mensajes: 2
Registrado: Jue May 28, 2020 7:52 pm

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

Mensaje 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
OpenOffice 3.1 en Windows Vista
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

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

Mensaje 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.
Adjuntos
FORO_CALC_ORDENAR_HOJAS_DESCEND.ods
LibO Calc 6.3.6
(9.88 KiB) Descargado 167 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.
Responder