Basic makroak deitzea Pythonetik
LibreOffice Basic makroak deitu ditzakezu Python scriptetatik, horrela eginbide nabarmenak eskuratzeko, adibidez:
Egunkari-eginbide sinpleak Access2Base liburutegiko Trace kontsolatik,
InputBox eta MsgBox pantailako S/I funtzioak Basic-en oinarrituta, Python bidezko garapena errazteko,
Xray deiak Python scripten exekuzioa eteteko, aldagaien ikuskapenean laguntzeko.
LibreOffice Application Programming Interface (API) Scripting Framework lan-markoak Python eta Basic lengoaien arteko script exekuzioa onartzen du, bai eta onartutako beste edozein programazio-lengoaiarekin ere. Argumentuak batetik bestera pasatzeko deiak erabili daitezke, betiere argumentu horiek bi lengoaiek ezagutzen dituzten datu mota desberdinak ordezkatzen badituzte, eta scriptgintzako lan-markoak haiek egoki bihurtzen dituztela onartuta.
Pythonen modulu estandarrak eta LibreOffice APIaren eginbideak ezagutzea gomendagarria da lengoaien arteko deiak egin baino lehen Pythonetik Basic, JavaScript edo beste edozein script-motorrera.
Python scriptak Integrated Development Environment (IDE) batetik esekutatzean, LibreOffice aplikazioak habiaratuta duen Basic motorra faltan egon daiteke. Testuinguru horretan, saihestu Pythonetik LibreOffice Basic-era deiak egitea. Hala ere, Python ingurunea eta Universal Networks Objects (UNO) osorik daude erabilgarri. Begiratu IDE bat konfiguratzea Python erabiltzeko informazio gehiagorako.
LibreOffice Basic scriptak atzitzen
LibreOffice Basic makroak pertsonalak, partekatuak edo dokumentuetan kapsulatuak izan daitezke. Haiek exekutatzeko, Pythonen exekuzio-garaia hornitu behar da Basic makroen kokalekuekin. com.sun.star.script.provider.XScriptProvider interfazea inplementatuta, script exekutagarriak atzitu daitezke:
import uno
from com.sun.star.script.provider import Xscript
def getBasicScript(macro='Main', module='Module1', library='Standard',
isEmbedded=False) -> XScript:
'''Eskuratu Basic script objektua hari deitu baino lehen.'''
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
LibreOffice Basic scriptak exekutatzea
com.sun.star.script.provider.XScript interfazearen LibreOffice Software Development Kit (SDK) dokumentazioak lengoaien arteko deiak egiteko hitzarmenak xehe azalduta ditu. Funtzioak deitzeko beharrezkoak dira hiru matrize:
lehenak deitutako errutinaren argumentuak zerrendatzen ditu
bigarrenak aldatutako argumentuak identifikatzen ditu
hirugarrenak itzulitako balioak biltegiratzen ditu
Python sintaxia
results = script.invoke((prompt,buttons,title), (), ())
script.invoke((message,), tuple, ())
script.invoke((args), (), results)
Script pertsonalen edo partekatuen adibideak
Sarrera/irteera pantailara ataleko adibideek Pythonetik Basic lengoaiara deiak egiteko moduak xehe azaltzen dituzte. Dokumentu-gertaerak monitorizatzea atalak azaltzen du nola erabili *args Python hitza Access2Base egunkari-kontsolaren elkarrizketa-koadroan parametro kopuru aldakorra inprimatzeko.
Garapen-sasoian, Python scriptak eten daitezke Xray hedapena erabilita, UNO objektuen propietateak eta metodoak ikuskatzeko. ASPO hedapen-araztaileak objektuen introspekzioa egitea onartzen du bai Xray bai MRI hedapenak erabilita.
def xray(myObject):
script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
script.invoke((myObject,), (), ())
Dokumentuetan kapsulatutako scripten adibideak
*argsPython sintaxi sinplifikatua erabili daiteke argumentu kopuru aldakorra onartzen duten LibreOffice Basic errutinekin batera. Azpiko Print eta SUM Python funtzioek beren Basic Print eta SUM parekoei deitzen diete, goian aipatutako getBasicScript funtzioak. Salbuespenen maneiua ez dago azalduta.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
def Print(*args):
"""Zehaztutako kateen edo zenbakizko adierazpenen irteera elkarrizketa-koadro batean."""
xScript = getBasicScript("Print", "Scripting", embedded=True)
xScript.invoke((args), (), ())
def SUM(*args):
"""BATU zehaztutako zenbakizko adierazpena."""
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,)
LibreOffice Basic lengoaiako Print eta SUM errutinek, dokumentuetan oinarritutakoek, argumentuen kopuru aldakorra onartzen dute. Private edo Public atributuek ez dute eraginik. Argumentuen motaren egiaztatzea saltatu egin da, argibidea argiagoa izan dadin.
Option Compatible ' "Standard.Scripting" module
Option Explicit
Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
''' Inprimatu zenbaki aldakorreko elementu-zerrenda '''
' CStr() argumentu bihurgarri guztiak onartzen dira
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
''' BATU zenbakien zerrenda aldakorra '''
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()