LibreOffice 24.8 Hjelp
Du kan hente LibreOffice Basic makroer fra Python-skript, og viktige funksjoner kan fås i retur. For eksempel:
Enkle loggfasiliteter fra Access2Base bibliotek Sporingskonsoll,
Inndataboks og MsgBox skjerm I / O-funksjoner basert på Basic for å underlette Python-utvikling,
Xray anrop for å avbryte kjøring av Python-skript med hensikt for å inspisere variabler.
LibreOffice Application Programming Interface (API) Scripting Framework, støtter kjøring av ulike språk script mellom Python og Basic, eller andre støttede programmeringsspråk for den saks skyld. Argumenter kan sendes frem og tilbake over anrop, forutsatt at de representerer primitive datatyper som begge språk gjenkjenner, og forutsatt at Scripting Framework konverterer dem på riktig måte.
Det anbefales å ha kunnskap om Python-standardmoduler og LibreOffice API-funksjoner før du kan kjøre anrop fra Python til Basic, JavaScript eller andre skriptmotorer.
Når du kjører Python-skript fra et integrert utviklingsmiljø (IDE), kan Deni LibreOffice-innebygde basicmotoren være fraværende. Unngå Python-til- LibreOffice Basic anrop i slike sammenhenger. Imidlertid er Python-miljøet og Universal Networks Objects (UNO) fullt tilgjengelig. Se Konfigurer et integrert IDE for Python for mer informasjon.
LibreOffice Basic makroer kan være personlige, delte eller innebygd i dokumenter. For å kunne kjøre dem, må Python-run-time ha tilgang til de grunnleggende makrolokasjonene. Implementering avcom.sun.star.script.provider.XScriptProvider grensesnittet gir tilgang til å hentekjørbare skript:
import uno
from com.sun.star.script.provider import Xscript
def getBasicScript(macro='Main', module='Module1', library='Standard',
isEmbedded=False) -> XScript:
'''Hent Basic skript objekter før aktivering.'''
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 Software Development Kit (SDK) dokumentasjon for com.sun.star.script.provider.XScript grensesnitett beskriver konvensjonen for anrop mellom språk. Aktivering av funksjoner krever tre matriser:
den første lister opp argumentene til den kalte rutinen
den andre identifiserer modifiserte argumenter
den tredje lagrer returverdiene
results = script.invoke((prompt,buttons,title), (), ())
script.invoke((message,), tuple, ())
script.invoke((args), (), results)
Eksempler i Inndata/utdata til Skjerm har detaljer om Python til Basic-aktiveringskall. Overvåking av dokumenthendelser illustrerer bruken av * args Python-idiom for å skrive ut et variabelt antall parametere til Access2Base-konsoll-loggingsdialogen.
På utviklingstidspunktet kan du avbryte utførelsen av Python-skript ved hjelp av Xray utvidelser for å inspisere egenskaper og metoder for UNO-objekter. APSO-utvidelsdebuggeren tillater introspeksjon av objekt ved hjelp av enten Xray eller MR-utvidelser.
def xray(myObject):
script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
script.invoke((myObject,), (), ())
*argsPython-forenklet syntaks kan brukes i forbindelse med LibreOffice Basic-rutiner som godtar et variabelt antall argumenter. Under Skriv ut og SUMMER Python-funksjoner anroper deres Basic Skriv ut og SUMMER-motparter, ved å bruke den allerede nevnte getBasicScript-funksjonen. Avvikshåndteringen er ikke videre detaljert.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
def Print(*args):
"""Skriver ut de angitte strengene eller numeriske uttrykk i en dialogboks."""
xScript = getBasicScript("Print", "Scripting", embedded=True)
xScript.invoke((args), (), ())
def SUM(*args):
"""SUMMER det spesifiserte talluttrykket."""
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 Skriv Ut og SUMMER dokument-baserte rutiner aksepterer et variabelt antallargumenter. Privat eller Offentlig atributterhar ingen effekt. Argumenttypekontrollen hoppes over for tydelighetens skyld.
Option Compatible ' "Standard.Scripting" module
Option Explicit
Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
''' Skriv ut en liste med variable nummer '''
' alle CStr() konvertible args aksepteres
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
''' SUMMER en variabel liste med tall '''
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()