Hola a todos, tengo una interfaz hecha en libre Calc y necesito llamar desde un mismo botón a dos macros, una de Basic y otra de Python, pero se deben realizar en secuencia, si o sí, porque la primer macro produce un resultado que usa la segunda. Cómo se puede resolver esto??? desde ya gracias!
PD. podrá ser algo así:
Sub mismacros
call AbrirRed (–> macro hecha en Basic)
call HacerCalculoRed (–> macro hecha en Python)
End Sub
dado que has hecho preguntas desde Python, pero el ejemplo es de una macro Basic, y como soy flojo y no me gusta repetir, para asegurarme te pregunto… ¿las vas a llamar efectivamente desde Basic?.. dado que ya le entraste a Python… ¿por que no hacerlo todo desde Python, Basic NO puede hacer todo lo que Python, pero Python si puede hacer todo lo de Basic?
Entonces lo hago desde Python… jaja
solo tienes que migrar la macro Basic a Python y llamarla directamente o importada si esta en otro modulo…
Para que quede como conocimiento…
Supongamos que tenemos las siguientes macros dentro de Mis Macros, en la librería Standard en el Module1 en Basic.
Sub main()
saludar("Ingrid")
End Sub
Sub saludar(nombre)
MsgBox "Hola " + nombre
End Sub
Function sumaruno(value)
sumaruno = value + 1
End Function
Para llamar a cada una de ellas desde Python, usamos:
import uno
CTX = uno.getComponentContext()
SM = CTX.getServiceManager()
def main(args=None):
service = 'com.sun.star.script.provider.MasterScriptProviderFactory'
factory = SM.createInstance(service)
url = 'vnd.sun.star.script:Standard.Module1.main?language=Basic&location=application'
args = ()
script = factory.createScriptProvider('').getScript(url)
script.invoke(args, None, None)[0]
url = 'vnd.sun.star.script:Standard.Module1.saludar?language=Basic&location=application'
args = ('Scarlette',)
script = factory.createScriptProvider('').getScript(url)
script.invoke(args, None, None)[0]
url = 'vnd.sun.star.script:Standard.Module1.sumaruno?language=Basic&location=application'
args = (10,)
script = factory.createScriptProvider('').getScript(url)
result = script.invoke(args, None, None)[0]
return
Desde Basic, llamar a una macro Python, es exactamente lo mismo, pero cambia un poco el url, por ejemplo:
vnd.sun.star.script:test.py$hello?language=Python&location=user