Pomoc Collabora Office 22.05
Możliwe jest wywoływanie skryptów Pythona z makr Collabora Office Basic i uzyskiwanie cennych funkcji, takich jak:
możliwa identyfikacja ComputerName lub OSName,
Basic FileLen() function and com.sun.star.ucb.SimpleFileAccess.getSize() API function exhibit a 2 Gigabytes file size upper limit that Python helps to overcome,
com.sun.star.util.PathSettings can be normalized,
i wiele więcej.
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.
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
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())
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:
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)
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
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:
argparse Parser opcji wiersza poleceń, argumentów i poleceń podrzędnych
cmath Funkcje matematyczne liczb zespolonych
csv Odczytywanie i zapisywanie plików CSV
datetime Prawdziwe typy daty i czasu
json Koder i dekoder JSON
math Funkcje matematyczne
re Operacje wyrażeń regularnych
socket Interfejs sieciowy niskiego poziomu
sys Parametry i funkcje specyficzne systemu
unittest i trace Framework do testów jednostkowych i śledzenie wykonywania Pythona
xml.etree.ElementTree API XML ElementTree