[RESUELTO] Macros en Libreoffice

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Avatar de Usuario
benalfe
Mensajes: 47
Registrado: Mié Sep 18, 2013 6:00 pm

[RESUELTO] Macros en Libreoffice

Mensaje por benalfe »

Hola chicos.

Resulta que estoy tratando de grabar una macro en libreoffice Calc y todo va perfecto, hasta que tengo que copiar el contenido de algunas celdas.

El proceso lo voy haciendo todo por atajo de teclado y cuando llego a la zona que tengo que copiar, le doy a Ctrl+C y copia las celdas sin problemas y continúo hasta terminar la grabación satisfactoriamente.

El problema viene cuando ejecuto la macro y todo funciona perfecto, excepto la copia que no la hace, sabéis que cuando se copia una celda, ésta se queda rodeada de puntos animados, sin embargo ejecutando la macro no lo hace, se ve claramente que no ha copiado nada y me graba las celdas vacías.

He probado a grabarla dando Ctrl+C, con botón derecho y "Copiar" y hasta desde el menú Editar/Copiar pero sigue sin funcionar ¿a alguien le ha pasado esto?.

Agradecería si alguien sabe la solución que me diga por qué puede pasar esto.

Por cierto, he buscado los atajos de teclado de libreoffice y curiosamente las teclas Ctrl+C y Ctrl+V no aparecen por ningún lado.

Un saludo y gracias de antemano.
Última edición por benalfe el Mié Oct 14, 2020 9:51 am, editado 1 vez en total.
OpenOffice
Windows 10 Pro 64 bits
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Macros en Libreoffice

Mensaje por xiseme »

¿? y... esa macro... ¿cómo es?¿dónde está? ¿cómo/cuándo se ejecuta? ... .... Como no la adjuntes/muestres, malamente nadie podrá ayudarte.

Aún así:
1.- https://forum.openoffice.org/es/forum/s ... +seleccion
2.- Ctrl+C Ctrl+V son atajos globales de algunos sistemas operativos**

**Por la seguridad de tus datos, espero que tu S.O. ya no sea el XP que indica tu firma
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
Avatar de Usuario
benalfe
Mensajes: 47
Registrado: Mié Sep 18, 2013 6:00 pm

Re: Macros en Libreoffice

Mensaje por benalfe »

Hola y gracias a xiseme por responder a mi consulta.

Bueno entrando en detalles les diré que mi SO es Windows 10 Pro (64 bits).

Por otro lado, esa macro se ejecuta por medio de un botón y el objeto de la misma es copiar parte de una línea de la hoja-1 (posición fija) y pegarla donde corresponda en la hoja-2.

Quiero aclarar de que cuando grabo la macro utilizo sólo el teclado, pero cuando inicio la grabación, obligatoriamente tengo que hacer clic en alguna celda para establecer un punto de inicio, sino el teclado no surte ningún efecto.

Aquí dejo el proceso de grabación que voy haciendo paso a paso:

1- Inicio la grabación de la macro en la página-1.
2- Hago clic en cualquier celda para establecer un punto de inico
3- Ctrl+Inicio (para ir a la celda A1)
4- Flecha abajo 2 veces (para situarme en la celda A3)
5- Shift+Flecha derecha 13 veces (para seleccionar todas las celdas de la fila 3 hasta la columna N)
6- Ctrl+C (para copiar todo el contenido seleccionado)
7- Ctrl+AvPág (para cambiar a la hoja-2)
8- Ctrl+Inicio (para situarme en la celda A1 de la hoja 2)
9- Ctrl+Flecha abajo (para ir a la última fila con datos)
10- Flecha abajo 1 vez (para situarme en la siguiente fila vacía)
11- Shift+Flecha derecha 13 veces (para seleccionar las celdas donde quiero pegar la información copiada)
12- Shift+Ctrl+V (para efectuar un pegado especial)
13- Intro (para aceptar el cuadro de diálogo)
14- Flecha abajo (para dar por finalizado)
15- Termino la grabación y lo guardo en Module2 / Main (que es la que estoy usando con el botón)

Una observación:
He probado a ejecutar la macro desde el menú superior "Herramientas>Macro>Ejecutar Macro" y desde ahí funciona bien o almenos da menos fallos.

Aquí dejo el código completo de la macro:

Código: Seleccionar todo

REM  *****  BASIC  *****






sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$D$9"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Sel"
args2(0).Value = false

dispatcher.executeDispatch(document, ".uno:GoToStart", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(1) as new com.sun.star.beans.PropertyValue
args3(0).Name = "By"
args3(0).Value = 1
args3(1).Name = "Sel"
args3(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args3())

rem ----------------------------------------------------------------------
dim args4(1) as new com.sun.star.beans.PropertyValue
args4(0).Name = "By"
args4(0).Value = 1
args4(1).Name = "Sel"
args4(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "By"
args5(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args5())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "By"
args6(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args6())

rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "By"
args7(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args7())

rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "By"
args8(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args8())

rem ----------------------------------------------------------------------
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "By"
args9(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args9())

rem ----------------------------------------------------------------------
dim args10(0) as new com.sun.star.beans.PropertyValue
args10(0).Name = "By"
args10(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args10())

rem ----------------------------------------------------------------------
dim args11(0) as new com.sun.star.beans.PropertyValue
args11(0).Name = "By"
args11(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args11())

rem ----------------------------------------------------------------------
dim args12(0) as new com.sun.star.beans.PropertyValue
args12(0).Name = "By"
args12(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args12())

rem ----------------------------------------------------------------------
dim args13(0) as new com.sun.star.beans.PropertyValue
args13(0).Name = "By"
args13(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args13())

rem ----------------------------------------------------------------------
dim args14(0) as new com.sun.star.beans.PropertyValue
args14(0).Name = "By"
args14(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args14())

rem ----------------------------------------------------------------------
dim args15(0) as new com.sun.star.beans.PropertyValue
args15(0).Name = "By"
args15(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args15())

rem ----------------------------------------------------------------------
dim args16(0) as new com.sun.star.beans.PropertyValue
args16(0).Name = "By"
args16(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args16())

rem ----------------------------------------------------------------------
dim args17(0) as new com.sun.star.beans.PropertyValue
args17(0).Name = "By"
args17(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args17())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:JumpToNextTable", "", 0, Array())

rem ----------------------------------------------------------------------
dim args20(0) as new com.sun.star.beans.PropertyValue
args20(0).Name = "Sel"
args20(0).Value = false

dispatcher.executeDispatch(document, ".uno:GoToStart", "", 0, args20())

rem ----------------------------------------------------------------------
dim args21(1) as new com.sun.star.beans.PropertyValue
args21(0).Name = "By"
args21(0).Value = 1
args21(1).Name = "Sel"
args21(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoDownToEndOfData", "", 0, args21())

rem ----------------------------------------------------------------------
dim args22(1) as new com.sun.star.beans.PropertyValue
args22(0).Name = "By"
args22(0).Value = 1
args22(1).Name = "Sel"
args22(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args22())

rem ----------------------------------------------------------------------
dim args23(0) as new com.sun.star.beans.PropertyValue
args23(0).Name = "By"
args23(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args23())

rem ----------------------------------------------------------------------
dim args24(0) as new com.sun.star.beans.PropertyValue
args24(0).Name = "By"
args24(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args24())

rem ----------------------------------------------------------------------
dim args25(0) as new com.sun.star.beans.PropertyValue
args25(0).Name = "By"
args25(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args25())

rem ----------------------------------------------------------------------
dim args26(0) as new com.sun.star.beans.PropertyValue
args26(0).Name = "By"
args26(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args26())

rem ----------------------------------------------------------------------
dim args27(0) as new com.sun.star.beans.PropertyValue
args27(0).Name = "By"
args27(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args27())

rem ----------------------------------------------------------------------
dim args28(0) as new com.sun.star.beans.PropertyValue
args28(0).Name = "By"
args28(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args28())

rem ----------------------------------------------------------------------
dim args29(0) as new com.sun.star.beans.PropertyValue
args29(0).Name = "By"
args29(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args29())

rem ----------------------------------------------------------------------
dim args30(0) as new com.sun.star.beans.PropertyValue
args30(0).Name = "By"
args30(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args30())

rem ----------------------------------------------------------------------
dim args31(0) as new com.sun.star.beans.PropertyValue
args31(0).Name = "By"
args31(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args31())

rem ----------------------------------------------------------------------
dim args32(0) as new com.sun.star.beans.PropertyValue
args32(0).Name = "By"
args32(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args32())

rem ----------------------------------------------------------------------
dim args33(0) as new com.sun.star.beans.PropertyValue
args33(0).Name = "By"
args33(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args33())

rem ----------------------------------------------------------------------
dim args34(0) as new com.sun.star.beans.PropertyValue
args34(0).Name = "By"
args34(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args34())

rem ----------------------------------------------------------------------
dim args35(0) as new com.sun.star.beans.PropertyValue
args35(0).Name = "By"
args35(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args35())

rem ----------------------------------------------------------------------
dim args36(0) as new com.sun.star.beans.PropertyValue
args36(0).Name = "By"
args36(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args36())

rem ----------------------------------------------------------------------
dim args37(0) as new com.sun.star.beans.PropertyValue
args37(0).Name = "By"
args37(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoLeftSel", "", 0, args37())

rem ----------------------------------------------------------------------
dim args38(5) as new com.sun.star.beans.PropertyValue
args38(0).Name = "Flags"
args38(0).Value = "SVD"
args38(1).Name = "FormulaCommand"
args38(1).Value = 0
args38(2).Name = "SkipEmptyCells"
args38(2).Value = false
args38(3).Name = "Transpose"
args38(3).Value = false
args38(4).Name = "AsLink"
args38(4).Value = false
args38(5).Name = "MoveMode"
args38(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args38())

rem ----------------------------------------------------------------------
dim args39(1) as new com.sun.star.beans.PropertyValue
args39(0).Name = "By"
args39(0).Value = 1
args39(1).Name = "Sel"
args39(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args39())


end sub
Un saludo a todos.
OpenOffice
Windows 10 Pro 64 bits
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Macros en Libreoffice

Mensaje por FJCC-ES »

¿Funciona bien esta versión?

Código: Seleccionar todo

dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$3"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "By"
args5(0).Value = 13

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args5())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:JumpToNextTable", "", 0, Array())

rem ----------------------------------------------------------------------
dim args20(0) as new com.sun.star.beans.PropertyValue
args20(0).Name = "Sel"
args20(0).Value = false

dispatcher.executeDispatch(document, ".uno:GoToStart", "", 0, args20())

rem ----------------------------------------------------------------------
dim args21(1) as new com.sun.star.beans.PropertyValue
args21(0).Name = "By"
args21(0).Value = 1
args21(1).Name = "Sel"
args21(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoDownToEndOfData", "", 0, args21())

rem ----------------------------------------------------------------------
dim args22(1) as new com.sun.star.beans.PropertyValue
args22(0).Name = "By"
args22(0).Value = 1
args22(1).Name = "Sel"
args22(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args22())

rem ----------------------------------------------------------------------
dim args23(0) as new com.sun.star.beans.PropertyValue
args23(0).Name = "By"
args23(0).Value = 13

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args23())

rem ----------------------------------------------------------------------
'dim args37(0) as new com.sun.star.beans.PropertyValue
'args37(0).Name = "By"
'args37(0).Value = 1

'dispatcher.executeDispatch(document, ".uno:GoLeftSel", "", 0, args37())

rem ----------------------------------------------------------------------
dim args38(5) as new com.sun.star.beans.PropertyValue
args38(0).Name = "Flags"
args38(0).Value = "SVD"
args38(1).Name = "FormulaCommand"
args38(1).Value = 0
args38(2).Name = "SkipEmptyCells"
args38(2).Value = false
args38(3).Name = "Transpose"
args38(3).Value = false
args38(4).Name = "AsLink"
args38(4).Value = false
args38(5).Name = "MoveMode"
args38(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertCOntents", "", 0, args38())

rem ----------------------------------------------------------------------
dim args39(1) as new com.sun.star.beans.PropertyValue
args39(0).Name = "By"
args39(0).Value = 1
args39(1).Name = "Sel"
args39(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args39())
Avatar de Usuario
benalfe
Mensajes: 47
Registrado: Mié Sep 18, 2013 6:00 pm

Re: Macros en Libreoffice

Mensaje por benalfe »

Lo siento, no entiendo a qué te refieres con si funciona bien esta versión... ¿y este código para qué es?, te agradecería que me aclares un poco para poder entenderlo.
Gracias.
OpenOffice
Windows 10 Pro 64 bits
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Macros en Libreoffice

Mensaje por FJCC-ES »

Borre todo el código original entre las lineas sub Main y end sub y ponga mi código en su sitio.

Para poner el cursor in las celda A3, usé

Código: Seleccionar todo

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$3"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1()) 
Para mover 13 columnas a la derecha usé

Código: Seleccionar todo

dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "By"
args5(0).Value = 13

dispatcher.executeDispatch(document, ".uno:GoRightSel", "", 0, args5()) 
Para pegar los datos usé

Código: Seleccionar todo

dispatcher.executeDispatch(document, ".uno:InsertCOntents", "", 0, args38()) 
No sé porque es necesario escribir InsertCOntents en vez de InsertContents.
Avatar de Usuario
benalfe
Mensajes: 47
Registrado: Mié Sep 18, 2013 6:00 pm

Re: Macros en Libreoffice

Mensaje por benalfe »

Vale ahora sí lo he entendido muchas gracias, pero por desgracia sigue sin funcionar y genera la línea destino de 13 celdas vacías, donde tendría que pegar los datos de la página original.
El único problema que veo es que no copia los datos, ya que ni siquiera la línea origen se queda con la animación de puntos (camino de hormigas) como cuando se copian datos de cualquier celda, al parecer en la macro no se registra la combinación "Ctrl+C", pero el resto de las instrucciones parecen ejecutarse correctamente ¿alguna idea?
OpenOffice
Windows 10 Pro 64 bits
Avatar de Usuario
benalfe
Mensajes: 47
Registrado: Mié Sep 18, 2013 6:00 pm

Re: Macros en Libreoffice

Mensaje por benalfe »

Hola de nuevo.
Al final la solución que encontré fue desinstalar LibreOffice y proceder a instalar OpenOffice, después de esto ya no he tenido problemas y la macro funciona de lujo (para quien le pueda interesar).
Un saludo a todos.
OpenOffice
Windows 10 Pro 64 bits
Responder