[RESUELTO] Macro para ordenar hojas

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Lehoi
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

[RESUELTO] Macro para ordenar hojas

Mensaje por Lehoi »

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

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Macro para ordenar determinadas

Mensaje por mauricio »

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
Lehoi
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: Macro para ordenar determinadas

Mensaje por Lehoi »

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
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macro para ordenar determinadas

Mensaje por fornelasa »

Esta macro ordena las hojas ascendentemente excepto las 3 primeras

Código: Seleccionar todo

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!
Lehoi
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: Macro para ordenar determinadas

Mensaje por Lehoi »

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
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macro para ordenar determinadas

Mensaje por fornelasa »

: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

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!
Lehoi
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por Lehoi »

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

Gracias maestro
OpenOffice 4.1.2 en Windows 7
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por fornelasa »

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
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por mauricio »

Una prueba más de la sencillez de Python...

Código: Seleccionar todo

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
Lehoi
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por Lehoi »

mauricio escribió:Una prueba más de la sencillez de Python...

Código: Seleccionar todo

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por mauricio »

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
Lehoi
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por Lehoi »

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

Mensaje por Lehoi »

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por mauricio »

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
Lehoi
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por Lehoi »

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por mauricio »

Prueba con el archivo que te anexo, descomprimelo y copialo a la carpeta Scripts correcta y pruebas...
Adjuntos
mymacros.py.7z
(307 Bytes) Descargado 211 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Lehoi
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por Lehoi »

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
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por fornelasa »

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

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!
Lehoi
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por Lehoi »

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

Mensaje por Lehoi »

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
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por fornelasa »

¡¡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!
Lehoi
Mensajes: 12
Registrado: Mar Ene 05, 2016 10:04 am

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por Lehoi »

matameeeeee :crazy: :knock: perdona mi ignorancia crack!
OpenOffice 4.1.2 en Windows 7
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] Macro para ordenar hojas

Mensaje por fornelasa »

: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!
Responder