Calling Python Scripts from Basic

Możliwe jest wywoływanie skryptów Pythona z makr Collabora Office Basic i uzyskiwanie cennych funkcji, takich jak:

tip

A reasonable exposure to Collabora Office Basic and to Application Programming Interface (API) features is recommended prior to perform inter-language calls from Basic to Python, to JavaScript or any other script engine.


Pobieranie skryptów Pythona

Python scripts can be personal, shared, or embedded in documents. In order to execute them, Collabora Office Basic needs to be provided with Python script locations. Locating com.sun.star.script.provider.XScript interface compliant UNO objects allows the execution of Python scripts:


         Option Explicit
             
         Public Function GetPythonScript(macro As String, _
                 Optional location As String) As com.sun.star.script.provider.Xscript
             ''' Pobierz obiekt skryptu Pythona przed wykonaniem
             ' Argumenty:
             '    macro   : jako "library/module.py$macro" lub "module.py$macro"
             '    location: jako "document", "share", "user" lub ENUM(eration)
             ' Wynik:
             '    znaleziono usługę 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 ' zgodny z com.sun.star.script.provider.XScriptProvider
             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
      

Wykonywanie skryptów Pythona

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.

Składnia

workstation_name = script.invoke(Array(), Array(), Array())

opSysName = script.invoke(Array(), in_outs, Array()) ' in_out to macierz

file_len = script.invoke(Array(systemFilePath), Array(), Array())

normalizedPath = script.invoke(Array(systemFilePath), Array(), Array())

Przykłady skryptów osadzonych

Poniżej procedury ComputerName i GetFilelen wywołują swoje odpowiedniki w Pythonie, używając wspomnianej wcześniej funkcji GetPythonScript. Obsługa wyjątków nie jest szczegółowo opisana.


         Option Explicit
         Option Compatible ' Właściwości są obsługiwane
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get ComputerName As String
             '''Nazwa stacji roboczej'''
             scr = GetPythonScript("Platform.py$computer_name", "document")
             ComputerName = scr.invoke(Array(), Array(), Array())
         End Property ' ComputerName
             
         Private Function GetFilelen(systemFilePath As String) As Currency
             '''Rozmiar pliku w bajtach'''
             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 ' skrypt dokumentu
             ISPERSONAL As String ' skrypt użytkownika
             ISSHARED As String ' makro Collabora Office
         End Type ' _SCRIPT_LOCATION
             
         Public Function Script() As Object ' Text enumeration
             Static enums As _SCRIPT_LOCATION : With enums
             If .ISEMBEDDED = "" Then
                 .ISEMBEDDED = "document" ' skrypt dokumentu
                 .ISPERSONAL = "user" ' skrypty użytkownika
                 .ISSHARED = "share" ' makro Collabora Office
             End If : End With ' enums
             Script = enums
         End Function ' Script
      

Wywoływane są dwa różne moduły Pythona. Mogą być osadzone w bieżącym dokumencie lub przechowywane w systemie plików. Sprawdzanie typu argumentu jest pomijane dla przejrzystości:


         # -*- 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)
      

Przykłady skryptów osobistych lub udostępnionych

Mechanizm wywoływania osobistych lub współdzielonych skryptów Pythona jest identyczny jak w przypadku skryptów osadzonych. Nazwy bibliotek są mapowane na foldery. Obliczanie ścieżek plików systemowych profilu użytkownika i udostępnionych modułów Collabora Office można wykonać zgodnie z opisem w Pobieranie informacji o sesji. Poniżej procedury OSName, HelloWorld i NormalizePath wywołują swoje odpowiedniki w Pythonie, używając wspomnianej wcześniej funkcji GetPythonScript. Obsługa wyjątków nie jest szczegółowo opisana.


         Option Explicit
         Option Compatible ' Właściwości są obsługiwane
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get OSName As String
             '''Nazwa platformy jak "Linux", "Darwin" lub "Windows"'''
             scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
             OSName = scr.invoke(Array(), Array(), Array()) 
         End Property ' OSName
             
         Private Sub HelloWorld()
             ''Współdzielone próbki Pythona 'Collabora Office '''
             scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
             scr.invoke(Array(), Array(), Array(),)
         End Sub ' HelloWorld
             
         Public Function NormalizePath(systemFilePath As String) As String
             '''Usuń w ścieżce zbędne '\..' '''
             scr = GetPythonScript("Os/Path.py$normalyze", "user")
             NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
         End Function ' NormalizePath
      

Domyślne moduły Pythona

Program Collabora Office osadzony w języku Python zawiera wiele standardowych bibliotek, z których można czerpać korzyści. Zawierają bogaty zestaw funkcji, takich jak między innymi:

Prosimy o wsparcie!