Python-Skripte aus Basic aufrufen

Das Aufrufen von Python-Skripten aus LibreOffice Basic-Makros ist m├Âglich und es stehen n├╝tzliche Funktionen zur Verf├╝gung, beispielsweise:

tip

Ein angemessener Umgang mit LibreOffice 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 LibreOffice 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 LibreOffice-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 ' LibreOffice-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" ' LibreOffice-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 LibreOffice-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 LibreOffice 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 LibreOffice 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!