[RESUELTO] Copiar rango fila a rango columna de otra

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
silco
Mensajes: 4
Registrado: Mar Nov 10, 2015 9:36 pm

[RESUELTO] Copiar rango fila a rango columna de otra

Mensaje por silco »

Buenas tardes,

estoy empezando en esto de las macros con LibreOffice, y la única solución que he encontrado para realizar esta tarea, es utilizando el dispatcher.
Se trata de copiar muchos rangos del tipo "A1:F6" , en un rango del tipo "A2:A7", y cada rango origen en una hoja distinta. He conseguido hacerlo utilizando el dispatcher, pero resulta muy lento cuando los rangos a copiar son muchos,
tanto por la actualización del interface de usuario al saltar entre hojas (que me gustaría saber como desactivar a través de código, puesto que las soluciones que he encontrado no me han servido), como por los pasos seguidos por el dispatcher.
He tratado de utilizar getdata(), getdataArray() y sus correspondientes set, pero al ser matrices de dimensiones diferentes, no me funciona. Algún consejo o pista.


Muchas gracias.

Enhorabuena a todo el mundo que participa en el foro, ayudando o consultando.
Última edición por silco el Jue Nov 12, 2015 12:10 am, editado 1 vez en total.
LibreOffice 4.4 - Debian 8

Si alguien te dedica su tiempo, te da algo que nunca recuperará...
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar un rango fila de una hoja, a un rango columna de

Mensaje por mauricio »

Puedes probar EasyDev, en la versión de desarrollo he agregado un modo muy sencillo de hacer lo que quieres...
En teoría si copias un rango el destino debería ser del mismo tamaño, si no lo es obtienes un error, pero EasyDev puede calcularte el rango destino.

http://easydev.readthedocs.org/en/devel ... l#set-data

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
silco
Mensajes: 4
Registrado: Mar Nov 10, 2015 9:36 pm

Re: Copiar un rango fila de una hoja, a un rango columna de

Mensaje por silco »

Muchas gracias por tu respuesta Mauricio, en principio la idea es utilizar LibreOffice tal y como viene, sin extensiones ni complementos. No conocía EasyDev, investigaré y la probaré. Finalmente encontré una solución celda por celda para transponer de fila a columna un rango. Pongo el código por si le sirve a alguien, o tenéis algún consejo.

Código: Seleccionar todo

Sub CopiaFilaenColumna (rangoorigen As Object, rangodestino As Object)
   Dim datosorigen 
   Dim datosdestino
   Dim i As Integer   
   datosorigen=rangoorigen.getdataArray()
   datosdestino=rangodestino.getdataArray()
   If rangoorigen.getRows.getCount() = 1 Then
	   For i=0 To rangoorigen.getColumns.getcount()-1
    	  datosdestino(i)(0) = datosorigen(0)(i)
	   Next	
   Else
     MsgBox "Rango origen debe ser de una fila"
   End If
   rangodestino.setdataArray(datosdestino)
End Sub
Siendo más rápido que con el dispatcher, sigue siendo lento, creo debido a la creación de numerosas nuevas hojas, es posible deshabilitar toda actualizacion del interface de usuario, hasta que haya realizado los cálculos y creado las hojas?

Gracias por vuestro tiempo.
LibreOffice 4.4 - Debian 8

Si alguien te dedica su tiempo, te da algo que nunca recuperará...
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar un rango fila de una hoja, a un rango columna de

Mensaje por mauricio »

silco escribió:la idea es utilizar LibreOffice tal y como viene, sin extensiones ni complementos.
¿alguna razon para desaprovechar el potencial de usar extensiones o complementos?
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
silco
Mensajes: 4
Registrado: Mar Nov 10, 2015 9:36 pm

Re: Copiar un rango fila de una hoja, a un rango columna de

Mensaje por silco »

La razón es demostrar el potencial equivalente para tareas como esta, de Calc respecto de Excel en una distribución Linux preconfigurada.
LibreOffice 4.4 - Debian 8

Si alguien te dedica su tiempo, te da algo que nunca recuperará...
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar un rango fila de una hoja, a un rango columna de

Mensaje por mauricio »

Me parece un muy mal argumento, pero cada quien... no veo la diferencia, por ejemplo, que lo hagas con Basic, a que lo hagas con Python con EasyDev, que usa el mismo API, bueno, si hay una gran diferencia...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
silco
Mensajes: 4
Registrado: Mar Nov 10, 2015 9:36 pm

Re: Copiar un rango fila de una hoja, a un rango columna de

Mensaje por silco »

No entiendo la finalidad de cuestionar o juzgar mi decisión. Aún así te explico, usuarios reticentes al cambio de Windows a Linux, de Office a LibreOffice o AOO, usuarios sin grandes conocimientos, el objetivo es poder mostrarles como hacer tareas básicas con macros, de forma similar a como lo hacen en Excel, para que el cambio sea menos traumatico, sin instalar este complemento etc.. Una vez se introduzcan en este mundo, llegarán a las extensiones y demás características avanzadas de LibreOffice, pero el primer paso es el primer paso.
No te juzgo, no me juzgues tú.
LibreOffice 4.4 - Debian 8

Si alguien te dedica su tiempo, te da algo que nunca recuperará...
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar un rango fila de una hoja, a un rango columna de

Mensaje por mauricio »

Nadie te esta juzgando... como tu, externo mi opinión solamente... estas en un foro público donde se ayuda, para ayudar, entre otras cosas, se externan opiniones... pero sin problemas, no dire más...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder