Pomoc za LibreOffice 25.2
Móžośo makra LibreOffice Basic ze skriptow Python wuwołaś a dostawaśo pón slědujuce późiwabne funkcije:
Jadnore protokolěrowańske móžnosći z konsole Trace biblioteki Access2Base,
Funkciji wobrazowki za zapódaśe a wudaśe (Z/W) InputBox a MsgBox, kótarejž na Basic bazěrujotej, aby wuwiśe Python wólažcył,
Xray pśetergnjenje wuwjeźenja skripta Python wuwołujo, aby pśeglědowanje wariablow wólažcył.
Skriptowa wokolina nałožeńskego programěrowańskego zwězowańskego městna (Application Programming Interface, API) wuwjeźenje skriptow mjazy Python a Basic abo drugimi pódprětymi programěrowańskimi rěcami pódpěra. Argumenty daju se mjazy wuwołanjami tam a sem pśepódaś, jolic su primitiwne datowe typy, kótarež wobej rěcy znajotej, a pód wuměnjenim, až skriptowa wokolina je pórědnje pśetwórjujo.
Pśiraźijo se, se ze standardnymi modulami Python a funkcijami API LibreOffice wopóznaś, nježli ažrěcne wuwołanja wót Python do Basic, JavaScript abo drugeje skriptoweje rěcy pśewjeźośo.
Gaž skripty Python z integrěrowaneje wuwijańskeje wokoliny (Integrated Development Environment, IDE) wuwjeźośo, felujo snaź do LibreOffice zasajźona mašina Basic. Wobińśo se togodla wuwołanja Python-do-LibreOffice Basic w takich kontekstach. Wokolina Python a Universal Networks Objects (UNO) pak stej połnje k dispoziciji. Cytajśo Integrěrowanu IDE za Python konfigurěrowaś za dalšne informacije.
Makra LibreOffice Basic mógu wósobinske, zgromadne abo do dokumentow zasajźone byś. Aby je wuwjadł, musy se wokolina casa wužywanja z makrowymi městnami Basic k dispoziciji stajiś. Implementěrowanje zwězowańskego městna com.sun.star.script.provider.XScriptProvider zmóžnja, wuwjeźobne skripty wótwoł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łanim wótwoł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 zwězowańske městno com.sun.star.script.provider.XScript wuwołańsku konwenciju za wuwołanja mjazy rěcami wopisujo. Wuwołanje funkcijow se tśi pólne wariable pomina:
prědna argumenty wuwołaneje rutiny nalicyjo
druga změnjone argumenty identificěrujo
tśeśa gódnoty slědkdaśa składujo
results = script.invoke((prompt,buttons,title), (), ())
script.invoke((message,), tuple, ())
script.invoke((args), (), results)
Zapódaśe/Wudaśe na wobrazowce wuwołanja Python do Basic wopisuju. Doglědowanje dokumentowych tšojenjow wužyśe rěcy *args Python za śišćanje wariabelneje licby parametrow do dialoga protokolěrowańskeje konsole Access2Base.
Za wuwiśe móžośo wuwjeźenje skripta Python z pomocu rozšyrjenja Xray pśetergnuś, aby kakosći a metody UNO-objektow pśeglědowaś. Pytanje zmólkow rozšyrjenja APSO objektowu introspekciju pak z Xray pak z MRI-rozšyrjenjami zmóžnja.
def xray(myObject):
script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
script.invoke((myObject,), (), ())
Zjadnorjona syntaksa *args Python dajo se w zwisku z rutinami LibreOffice Basic wužywaś, kótarež wariabelnu licbu argumentow akceptěruju. Pód funkcijami Python Print a SUM jich pendanty Basic Print a SUM z górjejce naspomnjoneju funkciju getBasicScript wuwołujo. Wobchad z wuwześami se njewopisujo.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
def Print(*args):
"""Wudawa pódane znamuškowe rjeśazki abo numeriske wuraze w dialogowym pólu."""
xScript = getBasicScript("Print", "Scripting", embedded=True)
xScript.invoke((args), (), ())
def SUM(*args):
"""SUM pódanego licbowego 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łaźe dokumentow wariabelnu licbu argumentow akceptěrujotej. Atributa Private abo Public njamatej wustatkowanje. Pśeglědowanje argumentowego typa se pśeglědnosći dla pśeskokujo.
Option Compatible ' "Standard.Scripting" module
Option Explicit
Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
''' Elementowu lisćinu wariabelneje licby śišćaś '''
' wšykne konwertibelne CStr()-argumenty se akceptěruju
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 jo wariabelna lisćina licbow '''
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()