Página 1 de 1

[RESUELTO] Copiar rango fila a rango columna de otra

NotaPublicado: Mar Nov 10, 2015 9:47 pm
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.

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

NotaPublicado: Mar Nov 10, 2015 9:53 pm
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

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

NotaPublicado: Mié Nov 11, 2015 10:11 pm
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   Expandir vistaContraer vista
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.

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

NotaPublicado: Mié Nov 11, 2015 10:21 pm
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?

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

NotaPublicado: Mié Nov 11, 2015 10:25 pm
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.

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

NotaPublicado: Mié Nov 11, 2015 11:37 pm
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...

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

NotaPublicado: Mié Nov 11, 2015 11:54 pm
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ú.

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

NotaPublicado: Mié Nov 11, 2015 11:58 pm
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...