Klicanje skriptov Python iz Basica

Skripte Python lahko kličete iz makrov Collabora Office Basic, s čimer pridobite pomembne funkcionalnosti, kot so:

tip

Priporočljivo je, da se dobro spoznate z jezikom Collabora Office Basic in vmesnikom Application Programming Interface (API), preden se iz skripte v Basicu sklicujete na Python, JavaScript ali drug skriptni mehanizem.


Pridobivanje skriptov v jeziku Python

Skripti Python so lahko zasebni, v skupni rabi ali vdelani v dokumente. Da bi jih izvajali, mora Collabora Office Basic poznati lokacije skriptov Python. Izvajanje skriptov Python omogočite z iskanjem predmetov UNO, ki so skladni z vmesnikom com.sun.star.script.provider.XScript:

Option Explicit

Public Function GetPythonScript(macro As String, _
        Optional location As String) As com.sun.star.script.provider.Xscript
    ''' Zagrabi predmet skripta Python pred izvajanjem
    ' Argumenti:
    '    macro/makro   : kot "library/module.py$macro" ali "module.py$macro"
    '    location/mesto: kot "document", "share", "user" ali ENUM(eration/oštevilčenje)
    ' Rezultat:
    '    locirana UNO-storitev com.sun.star.script.provider.XScript'''
    If IsMissing(location) Then location = "user"
    Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
    Dim sp As Object ' Združljivo 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

Izvajanje skriptov Python

Ogrodje skriptov vmesnika programiranja Collabora Office API (angl. Application Programming Interface) podpira izvajanje skriptov med Pythonom in Basicom ter drugimi podprtimi programskimi jeziki. Argumente lahko podajate skozi klice, če gre za primitivne vrste podatkov, ki jih prepoznata oba jezika, in če jih ogrodje API ustrezno pretvori.

Skladnja

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

imeOpSistema = script.invoke(Array(), in_outs, Array()) ' in_outs je matrika

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

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

Primeri vdelanih skriptov

Spodnji rutini ComputerName in GetFilelen kličeta svoja ekvivalenta v Pythonu z uporabo prej omenjene funkcije GetPythonScript. Izjeme niso podrobno obravnavane.

Option Explicit
Option Compatible ' Lastnosti so podprte

Private scr As Object ' com.sun.star.script.provider.XScript

Private Property Get ComputerName As String
    '''Ime delovne postaje'''
    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 datoteke v bajtih'''
    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 iz dokumenta
    ISPERSONAL As String ' skript uporabnika
    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 As String ' skript iz dokumenta
        .ISPERSONAL = "user" ' skripti uporabnika
        .ISSHARED = "share" ' Makro Collabora Office
    End If : End With ' enums
    Script = enums
End Function ' Script

Klicana sta dva različna modula Python. Lahko sta vdelana v trenutni dokument ali shranjena v datotečnem sistemu. Preverjanje vrste argumentov je zavoljo jasnosti preskočeno:

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

Primeri osebnih skriptov in skriptov v skupni rabi

Mehanizem za klicanje zasebnih ali skupnih skriptov Python je identičen tistemu za vdelane skripte. Imena knjižnic se preslikajo v mape. Izračun uporabniškega profila Collabora Office in datotečnih poti do modulov v skupni rabi je možno opraviti po navodilih Pridobivanje informacij o seji. Spodnji podprogrami OSName, HelloWorld in NormalizePath kličejo svoje ekvivalente v Pythonu z uporabo prej omenjene funkcije GetPythonScript. Izjeme niso podrobno obravnavane.

Option Explicit
Option Compatible ' Lastnosti so podprte

Private scr As Object ' com.sun.star.script.provider.XScript

Private Property Get OSName As String
    '''Ime platforme kot »Linux«, »Darwin« ali »Windows«'''
    scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
    OSName = scr.invoke(Array(), Array(), Array())
End Property ' OSName

Private Sub HelloWorld()
    '''Vzorec Collabora Office Python v skupni rabi'''
    scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
    scr.invoke(Array(), Array(), Array(),)
End Sub ' HelloWorld

Public Function NormalizePath(systemFilePath As String) As String
    '''Odstrani odvečne '\..' v poti'''
    scr = GetPythonScript("Os/Path.py$normalyze", "user")
    NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
End Function ' NormalizePath

Standardni moduli Python

V Collabora Office vdelani Python vsebuje številne standardne knjižnice, ki so vam lahko v pomoč, saj obsegajo bogat nabor funkcij, kot so:

Podprite nas!