Volání skriptů Pythonu z Basicu

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:

tip

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).


Získávání skriptů Pythonu

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

Spouštění skriptů Pythonu

Za tím účelem skriptovací rozhraní z rozhraní pro programování aplikací (API) Collabora Office umožňuje spouštění skriptů mezi Pythonem a Basicem, případně mezi dalšími podporovanými programovacími jazyky. Ve voláních lze předávat oběma směry argumenty za předpokladu, že se jedná o primitivní datové typy rozpoznatelné oběma jazyky a že je skriptovací rozhraní umí správně převést.

Syntaxe

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())

Příklady vložených skriptů

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ů:

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

Příklady osobních nebo sdílených skriptů

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

Standardní moduly Pythonu

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:

Podpořte nás!