Pomoc Collabora Office 24.04
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,
funkcja Basic FileLen() i funkcja API com.sun. star.ucb.SimpleFileAccess.getSize() wyświetlają górny limit rozmiaru pliku 2 gigabajty, który Python pomaga pokonać,
możliwa do znormalizowania com.sun.star.util.PathSettings,
i wiele więcej.
Właściwa znajomość Collabora Office Basic i Application Programming Interface (API) jest zalecana przed wykonaniem wywołań językowych z Basic do Pythona, do JavaScript lub innego silnika skryptowego.
Skrypty Pythona mogą być osobiste, udostępnione lub osadzone w dokumentach. Aby je wykonać, Collabora Office Basic musi mieć zapewnione lokalizacje skryptów Pythona. Lokalizowanie obiektów UNO zgodnych z interfejsem com.sun.star.script.provider.XScript umożliwiają wykonywanie skryptów Pythona:
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 Uzyskiwanie 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