Nápověda Collabora Office 24.04
Z maker Collabora Office Basic je možné volat skripty Pythonu a díky tomu lze přistupovat k užitečným funkcím jako například:
je možné zjistit ComputerName nebo OSName,
funkce Basicu FileLen() a funkce API com.sun.star.ucb.SimpleFileAccess.getSize() jsou omezeny maximální velikostí souboru 2 GB, zatímco v Pythonu se lze tomuto omezení vyhnout,
lze normalizovat com.sun.star.util.PathSettings
a k mnohým dalším.
Pokud chcete volat volat z jazyka Collabora Office Basic jazyky jiné (Python, JavaScript nebo jiný skriptovací jazyk), je vhodné, abyste měli odpovídající znalost Basicu a rozhraní pro programování aplikací (API).
Skripty Pythonu mohou být osobní, sdílené nebo vložené v dokumentech. Chcete-li je spouštět, je nutné jazyku Collabora Office Basic poskytnout informaci o jejich umístění. Toho dosáhnete pomocí rozhraní com.sun.star.script.provider.XScript, které odpovídá objektům UNO:
Option Explicit
Public Function GetPythonScript(macro As String, _
Optional location As String) As com.sun.star.script.provider.Xscript
''' Před spuštěním získá objekt se skriptem Pythonu
' Argumenty:
' macro : jako "library/module.py$macro" nebo "module.py$macro"
' location: jako "document", "share", "user" nebo ENUM(eration)
' Výsledek:
' služba UNO com.sun.star.script.provider.XScript s umístěním'''
If IsMissing(location) Then location = "user"
Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
Dim sp As Object ' kompatibilní s 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 je typu Array
file_len = script.invoke(Array(systemFilePath), Array(), Array())
normalizedPath = script.invoke(Array(systemFilePath), Array(), Array())
Níže uvedené programy ComputerName a GetFilelen volají odpovídající kód v Pythonu, a to s využitím výše zmíněné funkce GetPythonScript. V kódu není uvažováno zpracování chyb.
Option Explicit
Option Compatible ' zapnutí podpory Properties
Private scr As Object ' com.sun.star.script.provider.XScript
Private Property Get ComputerName As String
'''Název počítače'''
scr = GetPythonScript("Platform.py$computer_name", "document")
ComputerName = scr.invoke(Array(), Array(), Array())
End Property ' ComputerName
Private Function GetFilelen(systemFilePath As String) As Currency
'''Velikost souboru v bajtech'''
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 ' skript v dokumentu
ISPERSONAL As String ' uživatelský skript
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" ' skript v dokumentu
.ISPERSONAL = "user" ' uživatelský skript
.ISSHARED = "share" ' makro Collabora Office
End If : End With ' enums
Script = enums
End Function ' Script
Volají se dva různé moduly Pythonu. Tu mohou být buď vloženy do aktuálního dokumenty, nebo být uloženy v souborovém systému. Pro přehlednost je vynechána kontrola typu argumentů:
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)
Způsob volání osobních nebo sdílených skriptů Pythonu je stejný jako u vložených skriptů. Názvy knihoven jsou namapovány na složky. Cesty k souborům uživatelského profilu Collabora Office a sdílených modulů lze zjistit tak, jak je popsáno na stránce Zjišťování informací o relaci. Níže uvedené programy OSName, HelloWorld a NormalizePath volají odpovídající kód v Pythonu, a to s využitím výše zmíněné funkce GetPythonScript. V kódu není uvažováno zpracování chyb.
Option Explicit
Option Compatible ' zapnutí podpory Properties
Private scr As Object ' com.sun.star.script.provider.XScript
Private Property Get OSName As String
'''Název platformy jako "Linux", "Darwin" nebo "Windows"'''
scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
OSName = scr.invoke(Array(), Array(), Array())
End Property ' OSName
Private Sub HelloWorld()
'''Příklad sdíleného skriptu Pythonu v 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
'''Odstraní z řetězce s cestou nadbytečné '\..''''
scr = GetPythonScript("Os/Path.py$normalyze", "user")
NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
End Function ' NormalizePath
Python, který je součástí Collabora Office, obsahuje řadu užitečných standardních knihoven, které pokrývají širokou škálu funkcí. Mimo jiné se jedná o knihovny:
argparse Syntaktický analyzátor možností, argumentů a příkazů zadaných v příkazovém řádku
cmath Matematické funkce pro komplexní čísla
csv Načítání a ukládání souborů CSV
datetime Opravdové typy data a času
json Vytváření a zpracovávání formátu JSON
math Matematické funkce
re Operace s regulárními výrazy
socket Nízkoúrovňové síťové rozhraní
sys Parametry a funkce specifické pro systém
unittest a trace Prostředí pro jednotkové testy a sledování běhu programu v Pythonu
xml.etree.ElementTree ElementTree API pro formát XML