[RESUELTO] Macro para ordenar hojas

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

[RESUELTO] Macro para ordenar hojas

Notapor Lehoi » Mar Ene 05, 2016 10:22 am

Buenas a todos

Ante todo quiero dar las gracias por ayudar a tanta gente que se inicia en este mundo, el tiempo no es gratis y aquí la gente lo entrega desinteresadamente.

El problema que tengo es que quiero ordenar alfabeticamente las hojas de un libro de Calc pero exceptuando las 3 primeras, he revisado mucho la red y no he encontrado un codigo en el que basarme para hacer pruebas salvo este :
Código: Seleccionar todo   Expandir vistaContraer vista
Sub SortTabs()
For s = 4 To Sheets.Count - 1
For ss = s + 1 To Sheets.Count
If Sheets(ss).Name < Sheets(s).Name Then
    Sheets(ss).Move Before:=Sheets(s)
End If
Next ss
Next s
End Sub

que en excel me funciona bien pero al pasarlo a openoffice me da este error
Imagen

usé el servicio de conversion de vba a basic de esta pagina http://www.business-spreadsheets.com/vba2oo.asp pero ambos archivos son idénticos.

Bueno, perdonen que mi primer post sea para pedir, pero es que ya estoy a punto de rendirme con esto.

Gracias y perdonen el tocho
Última edición por Lehoi el Vie Ene 08, 2016 4:44 am, editado 2 veces en total
OpenOffice 4.1.2 en Windows 7
Lehoi
 
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: Macro para ordenar determinadas

Notapor mauricio » Mar Ene 05, 2016 3:58 pm

Para resolver esto, tienes que saber:
Como acceder a las hojas en Calc: https://wiki.openoffice.org/wiki/ES/Man ... _las_hojas
Como moverlas: https://wiki.openoffice.org/wiki/ES/Man ... endo_hojas
Y saber hacer un clico correctamente: https://wiki.openoffice.org/wiki/ES/Man ... For...Next

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 6063
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Macro para ordenar determinadas

Notapor Lehoi » Mar Ene 05, 2016 4:02 pm

Hola Mauricio
gracias por contestar, me pondré a estudiar esos artículos a ver si doy con la tecla. Sé que tu interés es ayudarme a razonar y aprender y te lo agradezco.

saludos
OpenOffice 4.1.2 en Windows 7
Lehoi
 
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: Macro para ordenar determinadas

Notapor fornelasa » Jue Ene 07, 2016 11:51 pm

Esta macro ordena las hojas ascendentemente excepto las 3 primeras
Código: Seleccionar todo   Expandir vistaContraer vista
Sub OrdenarHojas
    dim args1(0) as new com.sun.star.beans.PropertyValue
        document = ThisComponent.CurrentController.Frame
     dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
   args1(0).Name = "Nr"
  args1(0).Value = 1
         enombre = "Yrabajo" 
          inicio = 3
            muno = 2
          shojas = ThisComponent.Sheets
       nombres = shojas.ElementNames
                        shojas.InsertNewByName(enombre, 0)
          hoja = ThisComponent.Sheets.GetByName(enombre)
       trabajo = hoja.GetCellRangeByName("A1:A2000")      
                  trabajo.GetCellByPosition(0,i).String = "NomHojas"
                  
         For i = inicio To UBound(nombres)
           trabajo.GetCellByPosition(0, i - muno).String = nombres(i)
         Next
                  
      dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())
   args1(0).Name = "ToPoint"
  args1(0).Value = "$A$1"
                   dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
                    dispatcher.executeDispatch(document, ".uno:SortAscending", "", 0, Array())
         
         For i = inicio To UBound(nombres)
             shojas.moveByName(trabajo.GetCellByPosition(0, i - muno).String, i + 1)
         Next
         
          shojas.removeByName(enombre)
End Sub


Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3250
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macro para ordenar determinadas

Notapor Lehoi » Jue Ene 07, 2016 11:57 pm

Hola Federico

Ante todo gracias por responder y ayudarme con esto que me estaba volviendo loco la verdad.
Estoy leyendo y viendo videotutoriales pero estoy muy verde todavía ;)

El macro que has posteado va de maravilla, nuevamente gracias! Ojalá algún día pueda ayudar a otros como lo haz hecho.

Saludos!
OpenOffice 4.1.2 en Windows 7
Lehoi
 
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: Macro para ordenar determinadas

Notapor fornelasa » Vie Ene 08, 2016 1:03 am

:super:
Si te gusta complicarte la vida (sensible a mayusculas/minusculas/nombrepropio) aqui otro ejemplo:
Si la hoja 4, 5, 6, 7, 8 y 9 ..... se llaman por ejemplo Datos, Antiguos, Zapatos, kilos, america, codigos
Este codigo ordena las hojas como Antiguos, Datos, Zapatos, america, codigos, kilos ..... ¿se capta la idea?
Código: Seleccionar todo   Expandir vistaContraer vista
Sub OrdenarSheets
inicio = 3
      If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
            GlobalScope.BasicLibraries.LoadLibrary("Tools")
      End If
Sheets = ThisComponent.Sheets
Names = Sheets.ElementNames
      Dim hojas(Ubound(Names) - inicio)
         For i = inicio To Ubound(Names)
            hojas(i-inicio) = Names(i)
         Next
            SortedList = BubbleSortList(hojas)
         for i = 0 to UBound(SortedList)
            Sheets.MoveByName(SortedList(i), i+ inicio)
         next i
End Sub


Por favor edita tu post inicial y marca el tema como [RESUELTO] como se indica aqui:
https://forum.openoffice.org/es/forum/v ... f=3&t=2668

Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3250
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] Macro para ordenar hojas

Notapor Lehoi » Vie Ene 08, 2016 1:57 am

Ya eso que has posteado es como se dice aquí "rizar el rizo" ;) delicatessen!

Gracias maestro
OpenOffice 4.1.2 en Windows 7
Lehoi
 
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Notapor fornelasa » Vie Ene 08, 2016 4:06 am

Bien, ahora sé que es rizar el rizo (bueno tampoco había investigado mucho) :D :D
Ya solo para finalizar adicional al texto [RESUELTO] debemos agregar el icono palomita verde :super:
Saludos.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3250
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] Macro para ordenar hojas

Notapor mauricio » Vie Ene 08, 2016 7:47 pm

Una prueba más de la sencillez de Python...
Código: Seleccionar todo   Expandir vistaContraer vista
def ordenar_hojas():
    doc = XSCRIPTCONTEXT.getDocument()
    nombres = sorted(doc.getSheets().ElementNames[3:])
    for pos, nombre in enumerate(nombres, 3):
        doc.getSheets().moveByName(nombre, pos)
    return
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 6063
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: [RESUELTO] Macro para ordenar hojas

Notapor Lehoi » Vie Ene 08, 2016 8:50 pm

mauricio escribió:Una prueba más de la sencillez de Python...
Código: Seleccionar todo   Expandir vistaContraer vista
def ordenar_hojas():
    doc = XSCRIPTCONTEXT.getDocument()
    nombres = sorted(doc.getSheets().ElementNames[3:])
    for pos, nombre in enumerate(nombres, 3):
        doc.getSheets().moveByName(nombre, pos)
    return


Tengo instalada la última versión de Python, abro el documento de Calc, voy a macros-organizar macros-Python y se me abre el menú, pero no me permite crear (el botón aparece gris y no clickeable).
Supongo que debo darle a Crear y pegar el código, pero de ahí no paso :crazy:
OpenOffice 4.1.2 en Windows 7
Lehoi
 
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Notapor mauricio » Vie Ene 08, 2016 8:59 pm

No, con Python no puedes usar el editor, aquí esta todo lo necesario para que empieces: https://wiki.openoffice.org/wiki/ES/Man ... ros/Python

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 6063
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: [RESUELTO] Macro para ordenar hojas

Notapor Lehoi » Vie Ene 08, 2016 9:01 pm

Gracias Mauricio, me has dado buena tarea para esta noche ;)
OpenOffice 4.1.2 en Windows 7
Lehoi
 
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Notapor Lehoi » Vie Ene 08, 2016 9:33 pm

He leído y he seguido los pasos (explicados muy claros hay que reconocerlo)
He creado en un editor el fchero y guardado como archvo de python con extension .py
Imagen

Luego lo he copiado a la carpeta de scripts de OO para ser accesible a todos los usuarios y en la mía propia.
Pero cuando abro el menu no se me desplega como el resto de los macros que vienen de serie en OO, me aparece el macro que copié pero no puedo entrar en el y ejecutarlo.
Imagen
Perdona que moleste tanto pero me está gustando esto y quisiera aprender de los errores
OpenOffice 4.1.2 en Windows 7
Lehoi
 
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Notapor mauricio » Vie Ene 08, 2016 9:43 pm

El que no puedas seleccionarlas, te esta indicando un posible error de sintaxis, Python es muy, muy estricto para esto...

prueba con la que copie más arriba, solo copia y pega...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 6063
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: [RESUELTO] Macro para ordenar hojas

Notapor Lehoi » Vie Ene 08, 2016 10:05 pm

Yo he abierto el notepad++, nuevo y he hecho un fiel copia pega del código. Este editor creo que vale pero ahora tego dudas.
En lo que me recomendaste le esto:
"Aquí, es importante mencionar que Python es muy estricto con la indentación, algunos procesadores de texto plano insertan espacios en lugar de tabulaciones, Python puede trabajar sin problemas con unos y otros, el único requisito es que sean consistentes, asegúrate de que estas efectivamente insertando tabulaciones o espacios según prefieras trabajar en cada línea de código."
¿Crees que puede ser eso? en la captura puedes ver que el código se ve ordenado, pero no se.
espero que todas estas preguntas sirvan para que alguien que esté pasando por lo mismo aprenda de mis tortazos ;)))
OpenOffice 4.1.2 en Windows 7
Lehoi
 
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Notapor mauricio » Vie Ene 08, 2016 10:17 pm

Prueba con el archivo que te anexo, descomprimelo y copialo a la carpeta Scripts correcta y pruebas...
Adjuntos
mymacros.py.7z
(307 Bytes) 58 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 6063
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: [RESUELTO] Macro para ordenar hojas

Notapor Lehoi » Vie Ene 08, 2016 10:37 pm

Bueno, ahora si hace algo ;)
veo que has añadido la linea
import uno

ya ordena pero hay un pequeño problema, y es que me interpreta la hoja 10 como 1 porque me la pone de prmera, te muestro
Imagen

que crees que puede estar mal en el código?
gracias por tu paciencia
OpenOffice 4.1.2 en Windows 7
Lehoi
 
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Notapor fornelasa » Vie Ene 08, 2016 10:46 pm

No, no esta mal el codigo, el nombre de las hojas son texto y no numeros, esto quiere decir que "Hoja15" siempre va primero que "Hoja2" precisamente por ser texto. La macro de Excel que envias tambien tiene ese "defecto" (que no lo es).

Rizando el rizo :lol:
Solo como comentario ..... todas las macros expuestas aqui son "digamos" sensibles a mayusculas/nombrePropio/minusculas excepto la primera macro que envia fornelasa
Son "sensibles" a mayusculas/nombrePropio/minusculas
1) La macro de Excel
2) La segunda macro que envia fornelasa
3) La macro en Python
4) Esta otra (convertida de Excel a StarBasic Calc):
Código: Seleccionar todo   Expandir vistaContraer vista
Sub oBaTabsSort()
Sheets = ThisComponent.Sheets
For s = 3 To Sheets.Count + 1
For ss = s + 1 To Sheets.Count - 1
If Sheets(ss).Name < Sheets(s).Name Then
    Sheets.moveByName(Sheets(ss).Name, s)
End If
Next ss
Next s
End Sub


Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3250
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] Macro para ordenar hojas

Notapor Lehoi » Vie Ene 08, 2016 10:51 pm

Vale ya lo entiendo, es verdad que los detalles son todo :shock: .
Esta primera experiencia de Python que he tenido no se me va a olvidar nunca :super:
Gracias Mauricio y Federico, sois unos cracks!
OpenOffice 4.1.2 en Windows 7
Lehoi
 
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Notapor Lehoi » Vie Ene 08, 2016 11:13 pm

He probado la primera macro de fornelasa y me hace lo mismo, la hoja10 me la coloca después de las 3 primeras (hasta aquí perfecto) pero luego la pone antes que el resto.
Según entendí esa primera macro no era sensible por lo que esperaba que no hiciera eso, pero ya a esta hora estoy que veo doble ;)

prometo no molestar mas, era solo esa duda.
OpenOffice 4.1.2 en Windows 7
Lehoi
 
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Notapor fornelasa » Vie Ene 08, 2016 11:22 pm

¡¡ah ...... nunca dije sensible a numeros!! :lol: :lol:
En ese aspecto todas funcionan igual.

Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3250
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] Macro para ordenar hojas

Notapor Lehoi » Vie Ene 08, 2016 11:24 pm

matameeeeee :crazy: :knock: perdona mi ignorancia crack!
OpenOffice 4.1.2 en Windows 7
Lehoi
 
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Notapor fornelasa » Vie Ene 08, 2016 11:25 pm

:lol: :super:
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3250
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.


Volver a Macros y API UNO

¿Quién está conectado?

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