Pomoc Collabora Office 24.04
Makra Collabora Office Basic można wywoływać ze skryptów Pythona, a w zamian można uzyskać znaczące funkcje, takie jak:
możliwość prostego logowania za pomocą konsoli Trace biblioteki Access2Base,
InputBox i MsgBox wyświetlają funkcje wejścia/wyjścia oparte na Basic, aby ułatwić programowanie w Pythonie,
wywołania Xray przerywają wykonywanie skryptów Pythona, aby ułatwić kontrolę zmiennych.
Struktura skryptów API (Application Programming Interface) Collabora Office obsługuje międzyjęzykowe wykonywanie skryptów między językami Python i Basic lub innymi obsługiwanymi językami programowania. Argumenty mogą być przekazywane tam iz powrotem między wywołaniami, pod warunkiem, że reprezentują prymitywne typy danych rozpoznawane przez oba języki i przy założeniu, że środowisko skryptowe odpowiednio je konwertuje.
Zalecana jest znajomość standardowych modułów Pythona i funkcji API Collabora Office przed wykonaniem wywołań międzyjęzykowych z Pythona na Basic, JavaScript lub jakikolwiek inny silnik skryptowy.
Podczas uruchamiania skryptów języka Python z IDE (Integrated Development Environment) może nie być wbudowanego podstawowego mechanizmu Collabora Office. Unikaj wywołań Python-do-Collabora Office Basic w takich kontekstach. Jednak środowisko Pythona i UNO (Universal Networks Objects) są w pełni dostępne. Więcej informacji znajdziesz w artykule Konfigurowanie zintegrowanego środowiska programistycznego (IDE) dla Pythona.
Makra programu Collabora Office Basic mogą być osobiste, udostępnione lub osadzone w dokumentach. Aby je wykonać, środowisko uruchomieniowe Pythona musi mieć zapewnione podstawowe lokalizacje makr. Implementacja interfejsu com.sun.star.script.provider.XScriptProvider umożliwia pobieranie skryptów wykonywalnych:
import uno
from com.sun.star.script.provider import Xscript
def getBasicScript(macro='Main', module='Module1', library='Standard',
isEmbedded=False) -> XScript:
'''Chwyć obiekt skryptu Basic przed wywołaniem.'''
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
Dokumentacja SDK (Software Development Kit) Collabora Office dla com.sun.star.script.provider.XScript szczegółowo opisuje konwencję wywoływania połączeń międzyjęzykowych. Wywołanie funkcji wymaga trzech tablic:
pierwsza zawiera listę argumentów wywoływanej procedury
druga identyfikuje zmodyfikowane argumenty
trzecia przechowuje zwracane wartości
results = script.invoke((prompt,buttons,title), (), ())
script.invoke((message,), tuple, ())
script.invoke((args), (), results)
Przykłady w sekcji Wejście i wyjście ekranu szczegółowo omawiają wywołania Pythona do Basic. Monitorowanie zdarzeń w dokumentach ilustruje użycie idiomu Pythona *args do drukowania zmiennej liczby parametrów w oknie dialogowym konsoli logowania Access2Base.
W czasie tworzenia można przerwać wykonywanie skryptu Pythona za pomocą rozszerzenia Xray w celu sprawdzenia właściwości i metod obiektów UNO. Debuger rozszerzeń APSO umożliwia introspekcję obiektów przy użyciu rozszerzeń Xray lub MRI.
def xray(myObject):
script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
script.invoke((myObject,), (), ())
W przypadku podstawowych funkcji programu Collabora Office, które akceptują zmienną liczbę argumentów, można użyć uproszczonej składni języka Python *args. Poniższe funkcje Pythona Print i SUM wywołują odpowiednie funkcje podstawowe Print i SUM przy użyciu wspomnianej funkcji getBasicScript. Obsługa błędów nie jest uwzględniona w kodzie.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
def Print(*args):
"""Wypisuje określony ciąg znaków lub wyrażenie liczbowe w oknie dialogowym."""
xScript = getBasicScript("Print", "Scripting", embedded=True)
xScript.invoke((args), (), ())
def SUM(*args):
"""SUM podanego wyrażenia liczbowego."""
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,)
Podstawowe procedury Collabora Office Print i SUM oparte na dokumentach akceptują zmienną liczbę argumentów. Atrybuty Private lub Public nie działają. Sprawdzanie typu argumentów jest pomijane dla przejrzystości.
Option Compatible ' "Standard.Scripting" module
Option Explicit
Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
''' Wyświetl listę pozycji o numerze zmiennej '''
' wszystkie konwertowalne argumenty CStr() są akceptowane
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 to zmienna lista liczb '''
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()