Kalde Python-scripts fra Basic

Kalde Python-scripts fra Collabora Office Basic makroer er muligt, og værdifulde funktioner kan opnås, så som:

tip

Et fornuftig kendskab til Collabora Office Basic og til Application Programming Interface (API)-funktioner er anbefalet, før du giver dig i kast med kald fra Basic til Python, til JavaScript eller andre typer scripts.


Hente Python-scripts

Python-scripts kan være personlige, delte eller indlejret i dokumenter. For at kunne udløse dem, skal Collabora Office Basic udstyres med Python-scriptets placering. Ved hjælp af com.sun.star.script.provider.XScript interface-kompatible UNO-objekter tillader udførelse af Python-scripts:

Option Explicit

Public Function GetPythonScript(macro As String, _
        Optional location As String) As com.sun.star.script.provider.Xscript
    ''' Fang Python-script objekt før udførelsen
    ' Argumenter:
    '    makro   : som "library/module.py$macro" eller "module.py$macro"
    '    placering: som "document", "share", "user" eller ENUM(eration)
    ' Resultat:
    '    ved 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 ' com.sun.star.script.provider.XScriptProvider kompatibel
    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

Udløse Python-scripts

Collabora Office Application Programming Interface (API)s rammer for scripts understøtter mellemsproglig udførelse af scripts mellem Python og Basic, eller for den sags skyld med andre understøttede programmeringssprog. Argumenter kan videregives frem og tilbage på tværs af kald, forudsat at de repræsenterer primitive datatyper, som begge sprog genkender, og under den antagelse af scripting-rammerne konverterer dem på passende måde.

Syntaks

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

opSysName = script.invoke(Array(), in_outs, Array()) ' in_out er et array

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

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

Eksempler med indlejrede scripts

Herunder kalder rutinerne ComputerName og GetFilelen deres Python-versioner ved hjælp af førnævnte GetPythonScript-funktion. Håndtering af afvigelser er ikke detaljeret i eksemplerne.

Option Explicit
Option Compatible ' Egenskaber understøttes

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

Private Property Get ComputerName As String
    '''Maskinens navn'''
    scr = GetPythonScript("Platform.py$computer_name", "document")
    ComputerName = scr.invoke(Array(), Array(), Array())
End Property ' ComputerName

Private Function GetFilelen(systemFilePath As String) As Currency
    '''Filstørrelse i bytes'''
    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 ' dokument-script
    ISPERSONAL As String ' bruger-script
    ISSHARED As String ' Collabora Office -makro
End Type ' _SCRIPT_LOCATION

Public Function Script() As Object ' Text enumeration
    Static enums As _SCRIPT_LOCATION : With enums
    If .ISEMBEDDED = "" Then
        .ISEMBEDDED = "document" ' dokument-script
        .ISPERSONAL = "user" ' bruger-scripts
        .ISSHARED = "share" ' Collabora Office -makro
    End If : End With ' enums
    Script = enums
End Function ' Script

To forskellige Python-moduler kaldes. De kan enten integreres i det aktuelle dokument, eller lagres på filsystemet. Kontrol af argumenttype udelades fra eksemplerne for klarhedens skyld:

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

Eksempler med personlige eller delte scripts

Opkaldsmekanismen for personlige og delte Python-scripts er identisk med den for indlejrede scripts. Biblioteksnavne kortlægges til mapper. Beregning af Collabora Office brugerprofil og delte moduler systemfilstier kan udføres som beskrevet i Hente sessionsinformationer. OSName, HelloWorld og NormalizePath rutiner herunder kalder deres Python modstykker ved brug af førnævnte GetPythonScript-funktion. Håndtering af afvigelser er ikke detaljerede i eksemplerne.

Option Explicit
Option Compatible ' Egenskaber understøttes

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

Private Property Get OSName As String
    '''Platformsnavn som "Linux", "Darwin" eller "Windows"'''
    scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
    OSName = scr.invoke(Array(), Array(), Array())
End Property ' OSName

Private Sub HelloWorld()
    '''Eksempel med Collabora Office Python delte'''
    scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
    scr.invoke(Array(), Array(), Array(),)
End Sub ' HelloWorld

Public Function NormalizePath(systemFilePath As String) As String
    '''Fjern overflødige '\..' i sti'''
    scr = GetPythonScript("Os/Path.py$normalyze", "user")
    NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
End Function ' NormalizePath

Python standardmoduler

Collabora Office indlejret Python har mange standardbiblioteker du kan drage nytte af. De tilbyder en række funktioner så som (men ikke begrænset til):

Støt os venligst!