LibreOffice 24.8 Help
Het is mogelijk om LibreOffice Basic-macro's aan te roepen in Python-scripts en zo kunnen nuttige functies verkregen worden, zoals:
Eenvoudige logging uit Access2Base bibliotheek Trace console,
InputBox en MsgBox scherm I/O functies gebaseerd op Basic om ontwikkeling in Python te vergemakkelijken,
Xray onderbreekt tijdelijk de uitvoering van Python-script om variabelen te kunnen lezen.
De LibreOffice Application Programming Interface (API) Scripting Framework ondersteunt uitvoering van scripts tussen Python en Basic of andere ondersteunde programmeertalen. Argumenten kunnen worden teruggegeven en doorgegeven bij aanroepen, als die tenminste van een data-type zijn dat door beide talen wordt ondersteund en aannemende dat het Scripting Framework ze goed converteert.
Het is aanbevolen om kennis te hebben van Python-standaardmodules en LibreOffice API features voordat u aanroepen tussen verschillende programmeertalen als Python, Basic, JavaScript of andere script-engine gaat programmeren.
Bij het uitvoeren van Python-scripts vanuit een Integrated Development Environment (IDE), kan de LibreOffice-embedded Basic-engine ontbreken. Vermijdt dan Python-naar-LibreOffice Basic aanroepen. De Python-omgeving en Universal Networks Objects (UNO) zijn volledig beschikbaar. Meer informatie : Setting Up an Integrated IDE voor Python.
LibreOffice Basic-macro's kunnen persoonlijk, gedeeld of ingesloten zijn in documenten. Om ze te kunnen uitvoeren moet Python op het moment van uitvoeren de locaties van de Basic-macro's kennen. Door de interface com.sun.star.script.provider.XScriptProvider is het mogelijk de scripts op te halen:
import uno
from com.sun.star.script.provider import Xscript
def getBasicScript(macro='Main', module='Module1', library='Standard',
isEmbedded=False) -> XScript:
'''Ophalen Basic-script object voor het aanroepen.'''
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
De LibreOffice Software Development Kit (SDK) documentatie voor com.sun.star.script.provider.XScript interface details voor het aanroepen van andere programmeertalen. Bij een functie-aanroep zijn drie matrixen nodig:
de eerste bevat de argumenten van de aan te roepen routine
de volgende bevat de gewijzigde argumenten
de derde bevat de resultaten
results = script.invoke((prompt,buttons,title), (), ())
script.invoke((message,), tuple, ())
script.invoke((args), (), results)
Voorbeelden van I/O naar scherm detail Python-Basic aanroepen. Monitoren document gebeurtenissen geven het gebruik aan van *args Python idioom om een variabel aantal parameters weer te geven op het Access2Base logging console-dialoog.
Tijdens het ontwikkelen kunt u de uitvoering van Python-script onderbreken met de extensie Xray om de eigenschappen en de methoden van UNO-objecten te bekijken. De extensie APSO debugger maakt het mogelijk een object te beoordelen na gebruik van een Xray of een MRI extensie.
def xray(myObject):
script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
script.invoke((myObject,), (), ())
*argsPython vereenvoudigde syntaxis kan gebruikt worden samen met LibreOffice Basic-routines die een variabel aantal argumenten toestaan. Onder Print en SUM Python-functies roepen hun Basic Print en SUM tegenhangers aan, met gebruik van eerdergenoemde functie getBasicScript. De foutafhandeling is hier niet in detail beschreven.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
def Print(*args):
"""Toont de gespecificeerde strings of numerieke expressies in een dialoogvenster."""
xScript = getBasicScript("Print", "Scripting", embedded=True)
xScript.invoke((args), (), ())
def SUM(*args):
"""SUM de aangegeven getallen expressie."""
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,)
De documentgebaseerde LibreOffice Basic Print en SUM-routines accepteren een variabel aantal argumenten. De Private en Public attributen hebben geen effect. Voor de beknoptheid is de type-controle van de argumenten overgeslagen.
Option Compatible ' "Standard.Scripting" module
Option Explicit
Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
''' Itemlijst met variabel aantal afdrukken '''
' alle CStr() om te zetten argumenten zijn geaccepteerd
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
''' SUM een variabel aantal getallen '''
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()