Pomoc za LibreOffice 25.2
Móžeće makra LibreOffice Basic ze skriptow Python wuwołać a dóstawaće potom slědowace kedźbyhódne funkcije:
Jednore protokolowanske móžnosće z konsole Trace biblioteki Access2Base,
Funkciji wobrazowki za zapodaće a wudaće (Z/W) InputBox a MsgBox, kotrejž na Basic bazujetej, zo byšće wuwiće Python wosnadnił,
Xray přetorhnjenje wuwjedźenja skripta Python wuwołuje, zo by přepytowanje wariablow wosnadnił.
Skriptowa wokolina nałoženskeje programowanskeje tykački (Application Programming Interface, API) wuwjedźenje skriptow mjez Python a Basic abo druhimi podpěranymi programowanskimi rěčemi podpěruje. Argumenty dadźa so mjez wuwołanjemi tam a sem přepodać, jeli su primitiwne datowe typy, kotrež wobě rěči znajetej, a pod wuměnjenjom, zo skriptowa wokolina je porjadnje přetworja.
Poruča so, so ze standardnymi modulemi Python a funkcijemi API LibreOffice zeznajomić, prjedy hač rěčne wuwołanja wot Python do Basic, JavaScript abo druheje skriptoweje rěče přewjedźeće.
Hdyž skripty Python z integrowaneje wuwiwanskeje wokoliny (Integrated Development Environment, IDE) wuwjedźeće, faluje snano do LibreOffice zasadźena mašina Basic. Wobeńdźće tohodla wuwołanja Python-do-LibreOffice Basic w tajkich kontekstach. Wokolina Python a Universal Networks Objects (UNO) wšak stej połnje k dispoziciji. Čitajće Integrowanu IDE za Python konfigurować za dalše informacije.
Makra LibreOffice Basic móža wosobinske, zhromadne abo do dokumentow zasadźene być. Zo byšće je wuwjedł, dyrbi so wuwjedźenskočasowa wokolina z makrowymi městnami Basic k dispoziciji stajić. Implementowanje tykački com.sun.star.script.provider.XScriptProvider zmóžnja, wuwjedźomne skripty wotwołać:
import uno
from com.sun.star.script.provider import Xscript
def getBasicScript(macro='Main', module='Module1', library='Standard',
isEmbedded=False) -> XScript:
'''Skriptowy objekt Basic před wuwołanjom wotwołać.'''
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 LibreOffice Software Development Kit (SDK) za tykačku com.sun.star.script.provider.XScript wuwołansku konwenciju za wuwołanja mjez rěčemi wopisuje. Wuwołanje funkcijow sej tři pólne wariable wužaduje:
prěnja argumenty wuwołaneje rutiny nalistuje
druha změnjene argumenty identifikuje
třeća wróćenske hódnoty składuje
results = script.invoke((prompt,buttons,title), (), ())
script.invoke((message,), tuple, ())
script.invoke((args), (), results)
Zapodaće/Wudaće na wobrazowce wuwołanja Python do Basic wopisuja. Dohladowanje dokumentowych podawkow wužiće rěče *args Python za ćišćenje wariabelneje ličby parametrow do dialoga protokolowanskeje konsole Access2Base.
Za wuwiće móžeće wuwjedźenje skripta Python z pomocu rozšěrjenja Xray přetorhnyć, zo byšće kajkosće a metody UNO-objektow přepytować. Pytanje zmylkow rozšěrjenja APSO objektowu introspekciju pak z Xray pak z MRI-rozšěrjenjemi zmóžnja.
def xray(myObject):
script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
script.invoke((myObject,), (), ())
Zjednorjena syntaksa *args Python da so w zwisku z rutinami LibreOffice Basic wužiwać, kotrež wariabelnu ličbu argumentow akceptuja. Pod funkcijemi Python Print a SUM jich pendanty Basic Print a SUM z horjeka naspomnjenej funkciju getBasicScript wuwołuje. Wobchadźenje z wuwzaćemi so njewopisuje.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
def Print(*args):
"""Wudawa podate znamješkowe rjećazki abo numeriske wurazy w dialogowym polu."""
xScript = getBasicScript("Print", "Scripting", embedded=True)
xScript.invoke((args), (), ())
def SUM(*args):
"""SUM podateho ličbneho wuraza."""
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,)
Rutinje LibreOffice Basic Print a SUM na zakładźe dokumentow wariabelnu ličbu argumentow akceptujetej. Atributaj Private abo Public wuskutk nimatej. Přepruwowanje argumentoweho typa so přehladnosće dla přeskakuje.
Option Compatible ' "Standard.Scripting" module
Option Explicit
Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
''' Elementowu lisćinu wariabelneje ličby ćišćeć '''
' wšě konwertibelne CStr()-argumenty so akceptuja
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 je wariabelna lisćina ličbow '''
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()