Ajuda do LibreOffice 26.2
Pode invocar macros do LibreOffice através de scripts Python, e funcionalidades notáveis podem ser obtidas tais como:
Funcionalidades simples de registo da biblioteca Access2Base: registo na consola,
InputBox e MsgBox, funções de E/S de ecrã baseadas em Basic para facilitar o desenvolvimento em Python,
O Xray interrompe a execução do script Python para ajudar a inspecionar variáveis.
A estrutura de scripts da Interface de Programação de Aplicações (API) LibreOffice suporta a execução de scripts entre linguagens, nomeadamente entre Python e Basic, ou outras linguagens de programação compatíveis. Os argumentos podem ser transmitidos entre chamadas, desde que representem tipos de dados primitivos reconhecidos por ambas as linguagens e partindo do princípio de que a estrutura de scripts os converte adequadamente.
Recomenda-se ter conhecimentos sobre os módulos padrão do Python e as funcionalidades da API do LibreOffice antes de efetuar chamadas entre linguagens do Python para o Basic, JavaScript ou qualquer outro motor de script.
Ao executar scripts Python a partir de um Ambiente de Desenvolvimento Integrado (IDE), o motor Basic incorporado no LibreOffice pode não estar disponível. Evite chamadas de Python para o Basic do LibreOffice nesses contextos. No entanto, o ambiente Python e os Objetos de Redes Universais (UNO) estão totalmente disponíveis. Consulte Configurar um IDE integrado para Python para obter mais informações.
LibreOffice As macros Basic podem ser pessoais, partilhadas ou incorporadas em documentos. Para as executar, é necessário indicar ao motor de execução do Python as localizações das macros Basic. A implementação da interface com.sun.star.script.provider.XScriptProvider permite a recuperação de scripts executáveis:
import uno
from com.sun.star.script.provider import Xscript
def getBasicScript(macro='Main', module='Module1', library='Standard',
isEmbedded=False) -> XScript:
'''Obtenha o objeto de script Basic antes da invocação.'''
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
A documentação do Kit de Desenvolvimento de Software (SDK) LibreOffice para com.sun.star.script.provider.XScript detalha a convenção de chamada para chamadas entre linguagens. A invocação de funções requer três matrizes:
o primeiro lista os argumentos da rotina invocada
o segundo identifica os argumentos modificados
o terceiro guarda os valores devolvidos
results = script.invoke((prompt,buttons,title), (), ())
script.invoke((message,), tuple, ())
script.invoke((args), (), results)
Os exemplos em Entrada/Saída para o Ecrã detalham as chamadas de invocação de Python para Basic. Monitorização de eventos de documentos ilustra a utilização da expressão *args do Python para imprimir um número variável de parâmetros na caixa de diálogo da consola de registo do Access2Base.
Durante o desenvolvimento, é possível interromper a execução do script Python utilizando a extensão Xray para inspecionar as propriedades e métodos dos objetos UNO. O depurador da extensão APSO permite a introspecção de objetos utilizando as extensões Xray ou MRI.
def xray(myObject):
script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
script.invoke((myObject,), (), ())
*argsA sintaxe simplificada do Python pode ser utilizada em conjunto com as rotinas Basic LibreOffice que aceitam um número variável de argumentos. Abaixo, as funções Python Print e SUM chamam as suas contrapartes Basic Print e SUM, utilizando a função getBasicScript acima mencionada. O tratamento de exceções não é detalhado.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
def Print(*args):
"""Exibe as cadeias de caracteres ou expressões numéricas especificadas numa caixa de diálogo."""
xScript = getBasicScript("Print", "Scripting", embedded=True)
xScript.invoke((args), (), ())
def SUM(*args):
"""Soma a expressão 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,)
As rotinas baseadas em documentos LibreOffice Basic Print e SUM aceitam um número variável de argumentos. Os atributos Private ou Public não têm qualquer efeito. A verificação do tipo dos argumentos é ignorada por uma questão de clareza.
Option Compatible ' "Standard.Scripting" module
Option Explicit
Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
''' Imprimir a lista de itens de número variável '''
' todos os argumentos convertíveis por CStr() são aceites
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
''' SOMAR uma lista variável de números '''
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()