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:

tip

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

Das Scripting-Framework der Collabora Office-Anwendungsprogrammierschnittstelle (API) unterstützt die Ausführung von Skripten zwischen Python und Basic oder anderen unterstützten Programmiersprachen. Argumente können zwischen Aufrufen hin und her übergeben werden, sofern sie primitive Datentypen darstellen, die von beiden Sprachen erkannt werden, und vorausgesetzt, dass sie vom Scripting-Framework ordnungsgemäß konvertiert werden.

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" ' Dokumentenskript
        .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:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

import platform

def computer_name() -> str:
    return platform.node()

def OSname() -> str:
    return platform.system()
# -*- 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:

Bitte unterstützen Sie uns!