·

Crida a macros Basic des de Python

Podeu cridar les macros BASIC del Collabora Office des dels scripts de Python, i es poden obtenir funcionalitats destacables com a retorn, com ara:

La interfície de programació d'aplicacions (API) de Collabora Office, admet l'execució de scripts entre llenguatges Python i Basic, o altres llenguatges de programació compatibles. Els arguments es poden passar en els dos sentits de les crides sempre que representin tipus de dades primitius que els dos llenguatges reconeguin, i assumint que l'entorn de scripts els converteix de manera adequada.

tip

Es recomana tenir coneixement dels mòduls estàndard de Python i de les característiques de l'API de Collabora Office abans de realitzar crides des de Python a Basic, JavaScript o qualsevol altre motor de scripts.


warning

Quan s'executen scripts de Python des d'un Entorn de Desenvolupament Integrat (IDE), el motor de base integrat a Collabora Office pot estar absent. Evitar les crides de Python al Basic de Collabora Office en aquests contextos. Tanmateix, l'entorn Python i els objectes de xarxes universals (UNO) estan totalment disponibles. Consulteu Configuració del IDE integrat per a Python per obtenir més informació.


S'estan recuperant els scripts Basic de Collabora Office

Les macros Basic Collabora Office poden ser personals, compartides o, incrustades en documents. Per tal d'executar-les cal proporcionar a l'entorn d'execució de Python les ubicacions de les macro de Basic. Implementar la interfície com.sun.star.script.provider.XScriptProvider permet la recuperació d'scripts executables:

<bookmarkvalue>API;script.provider.MasterScriptProviderFactory: Recuperació d'scripts Basic</bookmarkvalue><bookmarkvalue>API;script.provider.XScript Execució d'scripts Basic</bookmarkvalue><bookmarkvalue>API;XScriptProvider Recuperació d'scripts Basic</bookmarkvalue>
import uno
from com.sun.star.script.provider import Xscript

def getBasicScript(macro='Main', module='Module1', library='Standard',
        isEmbedded=False) -> XScript:
    '''Captureu l'objecte script de Basic abans d'invocar-lo.'''
    ctx = uno.getComponentContext()
    smgr = ctx.ServiceManager
    if isEmbedded:
        desktop = smgr.createInstanceWithContext('com.sun.star.frame.Desktop', ctx)
        scriptPro = desktop.CurrentComponent.getScriptProvider()
        location = "document"
    else:
        mspf = smgr.createInstanceWithContext(
            "com.sun.star.script.provider.MasterScriptProviderFactory", ctx)
        scriptPro = mspf.createScriptProvider("")
        location = "application"
    scriptName = "vnd.sun.star.script:"+library+"."+module+"."+macro+ \
                 "?language=Basic&location="+location
    xScript = scriptPro.getScript(scriptName)
    return xScript

Execució d'scripts Basic de Collabora Office

La documentació del Software Development Kit (SDK) de Collabora Office corresponent a la interfície com.sun.star.script.provider.XScript detalla la convenció de crides entre llenguatges. La invocació de funcions requereix tres matrius:

Sintaxi Python

results = script.invoke((prompt,buttons,title), (), ())

script.invoke((message,), tuple, ())

script.invoke((args), (), results)

Exemples d'scripts personals o compartits

Exemples a Entrada/Sortida a pantalla detall de crides d'invocació Python a Basic. El Monitoratge d'esdeveniments dels documents mostra l'ús de *args de Python per imprimir el nombre variable de paràmetres a la consola Access2Base.

tip

Durant el període de desenvolupament podeu interrompre l'execució dels scripts en Python utilitzant l'Extensió Xray per tal d'inspeccionar propietats i mètodes d'objectes UNO. L'extensió per a la depuració APSO permet la introspecció d'objectes utilitzant qualsevol de les extensions Xray o MRI.


def xray(myObject):
	  script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
	  script.invoke((myObject,), (), ())

Exemples d'scripts incrustats als documents

La sintaxi simplificada de Python *args es pot utilitzar conjuntament amb les rutines Basic de Collabora Office que accepten un nombre variable d'arguments. A continuació, les funcions Python Printi SUM criden les seves corresponents Basic Printi SUMutilitzant la funció getBasicScript . La gestió d'excepcions no està detallada.

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

def Print(*args):
    ""Extreu les cadenes o expressions numèriques especificades en un quadre de diàleg."""
    xScript = getBasicScript("Print", "Scripting", embedded=True)
    xScript.invoke((args), (), ())

def SUM(*args):
    ""SUMA l'expressió numèrica especificada.""
    xScript = getBasicScript("SUM", "Scripting", embedded=True)
    res = xScript.invoke((args), (), ())
    return res[0]

# def getBasicScript()  # see above

def playWithArgs():
    Print("Fun with *args ", -9.81, 297864.681974, 8762E-137)
    Print(SUM(45, -9.81, 297864.681974))
    Print(SUM(45, -9.81, 297864.681974, 8762E+137))

g_exportedScripts = (playWithArgs,)

Les rutines basades en documents Basic de Collabora Office Print i SUM accepten un nombre variable d’arguments. Els atributs Private o Public no tenen efecte. La comprovació del tipus d’arguments s’ignora per tenir més claredat.

Option Compatible ' "Standard.Scripting" module
Option Explicit

Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
    ''' Imprimeix la llista del nombre variable d'elements'''
    ' s'accepten tots els arguments convertibles mitjançant CStr()
    Dim str As String, i As Integer
    If UBound(args) >= 0 Then
        For i = 0 To UBound(args)
            str = str + Cstr(args(i))+ sep
        Next i
    End If
    Print str
End Sub ' Standard.Scripting.Print()

Public Function SUM(ParamArray args() As Variant) As Variant
    ''' SUMA una llista variable de nombres'''
    Dim ndx As Integer
    If UBound(args) >= 0 Then
        For ndx = 0 To UBound(args)
            SUM = SUM + args(ndx)
        Next ndx
    End If
End Function ' Standard.Scripting.SUM()

Ens cal la vostra ajuda!