[RESUELTO]Introducir macros en libros

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Avatar de Usuario
eltete
Mensajes: 261
Registrado: Lun Oct 25, 2010 8:47 pm
Ubicación: Sant Cugat del Vallés - España

[RESUELTO]Introducir macros en libros

Mensaje por eltete »

Hola amigos:

Os agradecería que me indicaseis cómo abordar el problema que os indico a continuación, o bien, me indiquéis dónde puedo encontrar información referente a él.

Lo que pretendo es: Desde un libro de CALC quiero desarrollar una macro que abra otro libro e introduzca en él
1. una macro cuyas líneas de código tengo almacenadas en una cadena de texto
2. insertar una imagen concreta que tengo en un fichero gif
3. asignar a esa imagen la macro introducida

Muchas gracias por vuestra atención
Última edición por eltete el Jue Ago 22, 2013 5:05 pm, editado 1 vez en total.
Win XP SP3 OpenOffice 3.2.1
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Introducir macros en libros

Mensaje por FJCC-ES »

Código: Seleccionar todo

REM Abrir Documento
Folder = "C:\Users\nombre\Desktop\"
Archivo = "Target.ods"
URL = convertToURL(Folder & Archivo)
Dim MediaDesc(0) as New com.sun.star.beans.PropertyValue
MediaDesc(0).Name = "MacroExecutionMode"
MediaDesc(0).Value = com.sun.star.document.MacroExecMode.USE_CONFIG
oDoc = StarDesktop.loadComponentFromURL(URL, "_blank",0, MediaDesc)

REM Insertar una Macro
BLib = oDoc.BasicLibraries 
NewLib = BLib.createLibrary("Nueva")
MacroString = "Sub Mi_Sub" & CHR(13) & "PRINT ""Hello"" " & CHR(13) & "End Sub"
NewLib.insertByName("ModuleA", MacroString)

REM Preparar la imagen
imagen = "foto.gif"
ImagenURL = convertToURL(Folder & imagen)
oImagen_obj = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")

oImagen_obj.GraphicURL = ImagenURL
oSize = oImagen_obj.Size
oSize.Height = 2000
oSize.Width = 2000
oImagen_obj.Size = oSize
oPos = oImagen_obj.Position
oPos.X = 2000
oPos.Y = 3000
oImagen_obj.Position = oPos

REM asignar la macro a la imagen
Dim oPropVal(1) as New com.sun.star.beans.PropertyValue
oPropVal(0).Name = "EventType"
oPropVal(0).Value = "Script"
oPropVal(1).Name = "Script"
oPropVal(1).Value = "vnd.sun.star.script:Nueva.ModuleA.Mi_Sub?language=Basic&location=document"

REM Insertar la imagen
oDP = oDoc.DrawPages.getByIndex(0)
oDP.add(oImagen_obj)
oEvents = oImagen_obj.Events
oEvents.replaceByName("OnClick", oPropVal())
Avatar de Usuario
eltete
Mensajes: 261
Registrado: Lun Oct 25, 2010 8:47 pm
Ubicación: Sant Cugat del Vallés - España

Re: Introducir macros en libros

Mensaje por eltete »

Muchas gracias por tu aportación

Lo pruebo y digo algo
Win XP SP3 OpenOffice 3.2.1
Avatar de Usuario
eltete
Mensajes: 261
Registrado: Lun Oct 25, 2010 8:47 pm
Ubicación: Sant Cugat del Vallés - España

Re: Introducir macros en libros

Mensaje por eltete »

He probado la macro y funciona perfectamente. Muchas gracias por la aportación

Una última aclaración:

La línea: NewLib = BLib.createLibrary("Nueva") crea una nueva libreria
¿cómo se ha de modificar para que utilice una ya existente?

(He intentado UseLibrary pero no es correcto)
Win XP SP3 OpenOffice 3.2.1
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Introducir macros en libros

Mensaje por FJCC-ES »

Pude usar código como

Código: Seleccionar todo

BLib = oDoc.BasicLibraries 
IF BLib.hasByName("Nueva") Then
	BLib.loadLibrary("Nueva")
	Library = BLib.getByName("Nueva")
Else
	Library = BLib.createLibrary("Nueva")
End If

MacroString = "Sub Mi_Sub" & CHR(13) & "PRINT ""Hello"" " & CHR(13) & "End Sub"
Library.insertByName("ModuleE", MacroString)
El método Library.insertByName() funciona como un método replaceBy (reemplazar) por que, si ya existe un módulo, lo borra.
Avatar de Usuario
eltete
Mensajes: 261
Registrado: Lun Oct 25, 2010 8:47 pm
Ubicación: Sant Cugat del Vallés - España

Re: Introducir macros en libros

Mensaje por eltete »

Muchas gracias
Win XP SP3 OpenOffice 3.2.1
Responder