Pomoč LibreOffice 24.8
Makre LibreOffice Basic lahko kličete iz skriptov Python, s čimer pridobite pomembne funkcionalnosti, kot so:
enostavna zmožnost beleženja iz konzole Trace knjižnice Access2Base,
zaslonski V/I funkciji InputBox in MsgBox, ki temeljita na Basicu in poenostavita razvoj v Pythonu,
klici Xray, ki prekinjajo izvajanje skripta Python kot pomoč za proučevanje spremenljivk.
Ogrodje skriptov vmesnika programiranja LibreOffice API (angl. Application Programming Interface) podpira izvajanje skriptov med Pythonom in Basicom ter drugimi podprtimi programskimi jeziki. Argumente lahko podajate skozi klice, če gre za primitivne vrste podatkov, ki jih prepoznata oba jezika, in če jih ogrodje API ustrezno pretvori.
Priporočeno je, da se uporabnik pred začetkom oblikovanja klicev iz Pythona v Basic, JavaScript ali drugi skriptni mehanizem pouči o standardnih modulih Python in funkcionalnostih LibreOffice API.
Ko poganjate skripte Python iz okolja IDE (Integrated Development Environment), morda pogon Basic, vgnezden v LibreOffice, ne bo na voljo. V tem primeru priporočamo, da se izognite sklicem iz Pythona v LibreOffice Basic. Kljub temu so okolje Python in predmeti UNO (Universal Networks Objects) na voljo. Za več informacij preberite Nastavljanje integriranega IDE za Python.
Makri LibreOffice Basic so lahko zasebni, v skupni rabi ali vdelani v dokumente. Za izvajanje je treba Pythonu navesti lokacije makrov Basic. Implementacija vmesnika com.sun.star.script.provider.XScriptProvider omogoča pridobivanje izvajalnih skriptov:
import uno
from com.sun.star.script.provider import Xscript
def getBasicScript(macro='Main', module='Module1', library='Standard',
isEmbedded=False) -> XScript:
'''Zagrabi predmet skripta Basic pred priklicem.'''
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
Dokumentacija za razvojni paket LibreOffice Software Development Kit (SDK) za vmesnik com.sun.star.script.provider.XScript podrobno opisuje delovanje klicev med programskima jezikoma. Priklic funkcij zahteva tri matrike:
prvi izpiše seznam argumentov klicanega podprograma
drugi identificira spremenjene argumente
tretji hrani vrnjene vrednosti
results = script.invoke((prompt,buttons,title), (), ())
script.invoke((message,), tuple, ())
script.invoke((args), (), results)
Primeri v Vhod/izhod na zaslon podrobno izkazujejo klice iz Pythona v Basic. Spremljanje dogodkov dokumenta ilustrira rabo idioma *args v Pythonu za izpis spremenljivega števila parametrov v pogovorno okno konzole beleženja Access2Base.
Med razvojem lahko prekinete izvajanje skripta Python z razširitvijo Xray, s katero preverite lastnosti in metode predmetov UNO. Razhroščevalnik razširitve APSO omogoča introspekcijo predmetov s pomočjo razširitve Xray ali MRI.
def xray(myObject):
script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
script.invoke((myObject,), (), ())
Poenostavljeno Pythonovo skladnjo *args lahko uporabite skupaj s podprogrami LibreOffice Basic, ki sprejmejo spremenljivo število argumentov. Pythonovi funkciji Print in SUM kličeta Print in SUM v Basicu z že omenjeno funkcijo getBasicScript. Izjeme niso podrobno obravnavane.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
def Print(*args):
"""Izpiše določene nize ali številske izraze v pogovorno okno."""
xScript = getBasicScript("Print", "Scripting", embedded=True)
xScript.invoke((args), (), ())
def SUM(*args):
"""Sešteje navedene številske izraze."""
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,)
Na dokumentu temelječi rutini LibreOffice Basic Print in SUM sprejmeta spremenljivo število argumentov. Atributa Private in Public nimata učinka. Preverjanje vrste argumentov je zaradi jasnosti preskočeno.
Option Compatible ' "Standard.Scripting" module
Option Explicit
Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
''' Natisni seznam elementov spremenljivega obsega '''
' sprejema vse pretvorljive argumente 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
''' Vsota spremenljivega seznama števil '''
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()