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.

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

Notapor eonybor » Jue May 28, 2020 7:58 pm

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

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

Notapor PepeOooSevilla » Jue May 28, 2020 8:20 pm

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.
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

Notapor eonybor » Vie May 29, 2020 6:49 am

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

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

Notapor PepeOooSevilla » Vie May 29, 2020 12:44 pm

Hola.
Adjunto un ejemplo con una de las posibles soluciones. Este es el código:
Código: Seleccionar todo   Expandir vistaContraer vista
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) 28 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.
Avatar de Usuario
PepeOooSevilla
 
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)


Volver a Principiantes

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados