Python-Skripte aus Basic aufrufen
Das Aufrufen von Python-Skripten aus Collabora Office Basic-Makros ist möglich und es stehen nützliche Funktionen zur Verfügung, beispielsweise:
Die Identifikation von ComputerName oder OSName ist möglich,
Die Basic-Funktionen FileLen() und com.sun.star.ucb.SimpleFileAccess. Die API-Funktion getSize() hat eine Obergrenze von 2 Gigabyte Dateigröße, die mit Python verarbeitet werden kann.
com.sun.star.util.PathSettings kann normalisiert werden
und vieles mehr.
Ein angemessener Umgang mit Collabora Office Basic und der Anwendungs-Programmierschnittstelle (API) ist vor der Ausführung von Sprachaufrufen von Basic zu Python, zu JavaScript oder einer anderen Skript-Engine empfehlenswert.
Python-Skripte abrufen
Python-Skripte können privat, freigegeben oder in Dokumente eingebettet sein. Um sie auszuführen, muss Collabora Office Basic mit Python-Skriptpfaden versehen werden. Das Auffinden von com.sun.star.script.provider.XScript-Interface-kompatiblen UNO-Objekten ermöglicht die Ausführung von Python-Skripten:
Option Explicit
Public Function GetPythonScript(macro As String, _
Optional location As String) As com.sun.star.script.provider.Xscript
''' Holt sich das Python-Skript-Objekt vor der Ausführung
' Argumente:
' Makro: als "library/module.py$macro" oder "module.py$macro"
' Ort: als "document", "share", "user" oder ENUM(eration)
' Ergebnis:
' findet com.sun.star.script.provider.XScript-UNO-Service'''
If IsMissing(location) Then location = "user"
Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
Dim sp As Object ' com.sun.star.script.provider.XScriptProvider-kompatibel
Dim uri As String
If location="document" Then
sp = ThisComponent.getScriptProvider()
Else
mspf = CreateUNOService("com.sun.star.script.provider.MasterScriptProviderFactory")
sp = mspf.createScriptProvider("")
End If
uri = "vnd.sun.star.script:"& macro &"?language=Python&location="& location
GetPythonScript = sp.getScript(uri)
End Function ' GetPythonScript
Python-Skripte ausführen
Syntax
workstation_name = script.invoke(Array(), Array(), Array())
opSysName = script.invoke(Matrix(), in_outs, Matrix()) ' in_out ist eine Matrix
file_len = script.invoke(Array(systemFilePath), Array(), Array())
normalizedPath = script.invoke(Array(systemFilePath), Array(), Array())
Beispiele für eingebettete Skripte
Unterhalb der Routinen ComputerName und GetFilelen werden Python-Gegenstücke mit der oben genannten Funktion GetPythonScript aufgerufen. Die Ausnahmebehandlung ist nicht detailliert.
Option Explicit
Kompatible Option ' Eigenschaften werden unterstützt
Private scr As Object ' com.sun.star.script.provider.XScript
Private Property Get ComputerName As String
'''Name der Workstation'''
scr = GetPythonScript("Platform.py$computer_name", "document")
ComputerName = scr.invoke(Array(), Array(), Array())
End Property ' ComputerName
Private Function GetFilelen(systemFilePath As String) As Currency
'''Dateigröße in Bytes'''
scr = GetPythonScript("Os/Path.py$get_size", Script.ISEMBEDDED)
GetFilelen = scr.invoke(Array(systemFilePath), Array(), Array(),)
End Function ' GetFilelen
Private Type _SCRIPT_LOCATION
ISEMBEDDED As String ' Dokumentenskript
ISPERSONAL As String ' Benutzerskript
ISSHARED As String ' Collabora Office-Makro
End Type ' _SCRIPT_LOCATION
Public Function Script() As Object ' Text enumeration
Static enums As _SCRIPT_LOCATION : With enums
If .ISEMBEDDED = "" Then
.ISEMBEDDED = "document" ' Dokumentskript
.ISPERSONAL = "user" ' Benutzerskript
.ISSHARED = "share" ' Collabora Office-Makro
End If : End With ' enums
Script = enums
End Function ' Script
Es werden zwei verschiedene Python-Module aufgerufen. Sie können entweder in das aktuelle Dokument eingebettet oder im Dateisystem gespeichert werden. Die Überprüfung des Argumenttyps wird aus Gründen der Übersichtlichkeit übersprungen:
Platform.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import platform
def computer_name() -> str:
return platform.node()
def OSname() -> str:
return platform.system()
Os/Path.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import os.path
def get_size(systemFilePath: str) -> str:
return str(os.path.getsize(systemFilePath))
def normalyze(systemPath: str) -> str:
return os.path.normpath(systemPath)
Beispiele für private oder gemeinsam genutzte Skripte
Der Aufrufmechanismus für private oder gemeinsam genutzte Python-Skripte ist identisch mit dem von eingebetteten Skripten. Bibliotheksnamen werden Ordnern zugeordnet. Die Berechnung der Systemdateipfade für Collabora Office-Benutzerprofile und gemeinsam genutzte Module kann wie in Abrufen von Sitzungsinformationen beschrieben durchgeführt werden. Unterhalb von OSName rufen die Routinen HelloWorld und NormalizePath ihre Python-Gegenstücke mit der oben genannten Funktion GetPythonScript auf. Die Ausnahmebehandlung ist nicht detailliert.
Option Explicit
Option Compatible ' Eigenschaften werden unterstützt
Private scr As Object ' com.sun.star.script.provider.XScript
Private Property Get OSName As String
'''Plattform-Name wie "Linux", "Darwin" oder "Windows"'''
scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
OSName = scr.invoke(Array(), Array(), Array())
End Property ' OSName
Private Sub HelloWorld()
'''Beispiel für gemeinsames Collabora Office Python'''
scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
scr.invoke(Array(), Array(), Array(),)
End Sub ' HelloWorld
Public Function NormalizePath(systemFilePath As String) As String
'''Überflüssiger Abschnitt '\..' im Pfad'''
scr = GetPythonScript("Os/Path.py$normalyze", "user")
NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
End Function ' NormalizePath
Python-Standardmodule
In Collabora Office eingebettetes Python enthält viele Standardbibliotheken, von denen Sie profitieren können. Sie sind mit zahlreichen Funktionen ausgestattet, unter anderem:
argparse Parser für Befehlszeilenoptionen, Argumente und Unterbefehle
cmath Mathematische Funktionen für komplexe Zahlen
csv CSV-Dateien lesen und schreiben
datetime Echte Datums- und Zeittypen
json JSON Encoder und Decoder
math Mathematische Funktionen
re Operationen mit regulären Ausdrücken
socket Low-Level-Netzwerkschnittstelle
sys System-spezifische Parameter und Funktionen
unittest und trace Unit-Test-Framework und verfolgen von Python-Ausführungen
xml.etree.ElementTree ElementTree-XML-API