Skripty Python z Basic wuwołaś

Wuwołanje skriptow Python z makrow LibreOffice jo móžne, a wužytne funkcije su k dispoziciji, na pśikład:

tip

Pśiměrjony wobchad z LibreOffice Basic a z funkcijami zwězowańskego městna programěrowanja nałoženjow (API) se pśiraźijo, nježli až se wuwołanja mjazy rěcami wót Basic do Python, do JavaScript abo do drugeje skriptoweje rěcy wuwjadu.


Skripty Python wótwołaś

Skripty Python mógu priwatne, wózjawjone abo do dokumentow zasajźone byś. Aby je wuwjadł, LibreOffice Basic městna skriptow Python trjeba. Pytanje za UNO-objektami, kótarež su kompatibelne z com.sun.star.script.provider.XScript wam zmóžnja, skripty Python wuwjasć:

Option Explicit

Public Function GetPythonScript(macro As String, _
        Optional location As String) As com.sun.star.script.provider.Xscript
    ''' Skriptowy objekt Python se do wuwjeźenja wobstaraś
    ' Argumenty:
    ' Makro: ako "library/module.py$macro" abo "module.py$macro"
    ' Městno: ako "document", "share", "user" abo ENUM(eracija)
    ' Wuslědk:
    ' pyta słužbu com.sun.star.script.provider.XScript-UNO'''
    If IsMissing(location) Then location = "user"
    Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
    Dim sp As Object ' kompatibelny 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

Skripty Python wuwjasć

Skriptowa wokolina nałožeńskego programěrowańskego zwězowańskego městna (Application Programming Interface, API) wuwjeźenje skriptow mjazy Python a Basic abo drugimi pódprětymi programěrowańskimi rěcami pódpěra. Argumenty daju se mjazy wuwołanjami tam a sem pśepódaś, jolic su primitiwne datowe typy, kótarež wobej rěcy znajotej, a pód wuměnjenim, až skriptowa wokolina je pórědnje pśetwórjujo.

Syntaksa

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

opSysName = script.invoke(Matrix(), in_outs, Matrix()) ' in_out jo pólna wariabla

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

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

Pśikłady za zasajźone skripty

Pód rutinami ComputerName a GetFilelen se jeju pendanta Python wuwołujotej, z pomocu do togo naspomnjeteje funkcije GetPythonScript. Wobchad z wuwześim njejo datailěrowane.

Option Explicit
Kompatibelne nastajenje ' Kakosći so pódpěraju

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

Private Property Get ComputerName As String
    '''Mě źěłoweje stacije'''
    scr = GetPythonScript("Platform.py$computer_name", "document")
    ComputerName = scr.invoke(Array(), Array(), Array())
End Property ' ComputerName

Private Function GetFilelen(systemFilePath As String) As Currency
    '''Datajowa wjelikosć 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 ' dokumentowy skript
    ISPERSONAL As String ' wužywaŕski skript
    ISSHARED As String ' makro LibreOffice
End Type ' _SCRIPT_LOCATION

Public Function Script() As Object ' Text enumeration
    Static enums As _SCRIPT_LOCATION : With enums
    If .ISEMBEDDED = "" Then
        .ISEMBEDDED = "document" ' dokumentowy skript
        .ISPERSONAL = "user" ' wužywaŕske skripty
        .ISSHARED = "share" ' makro LibreOffice
    End If : End With ' enums
    Script = enums
End Function ' Script

Dwa rozdźělnej modula Python se wuwołujotej. Dajotej se pak do aktualnego dokumenta zasajźiś pak w datajowem systemje składowaś. Pśeglědowanje argumentowego typa se z pśicynow pśeglědnosći pśeskokujo:

# -*- 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śikłady za priwatne abo zgromadnje wužyte skripty

Wuwołański mechanizm za priwatne abo zgromadnje wužyte skripty Python jo identiski z tym zasajźonych skriptow. Mjenja bibliotekow se zarědnikam pśirěduju. Woblicenje systemowych sćažkow wužywaŕskich profilow a zgromadnje wužytych modulow dajo se ako w Pósejźeńske informacije wótwołaś wopisane pśewjasć. Pód rutinami OSName, HelloWorld a NormalizePath swóje pendanty Python wuwołuju, z pomocu górjejce naspomnjeteje funkcije GetPythonScript. Wobchad z wuwześim njejo detailěrowane.

Option Explicit
Kompatibelne nastajenje ' Kakosći se pódpěraju

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

Private Property Get OSName As String
    '''Platformowe mě "Linux", "Darwin" abo "Windows"'''
    scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
    OSName = scr.invoke(Array(), Array(), Array())
End Property ' OSName

Private Sub HelloWorld()
    '''Pśikład za zgromadny LibreOffice Python'''
    scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
    scr.invoke(Array(), Array(), Array(),)
End Sub ' HelloWorld

Public Function NormalizePath(systemFilePath As String) As String
    '''Wuzbytny wótrězk '\..' w sćažce'''
    scr = GetPythonScript("Os/Path.py$normalyze", "user")
    NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
End Function ' NormalizePath

Standardne module Python

Do LibreOffice zasajźony Python wjele standardnych bibliotekow wopśimujo, z kótarychž móžośo wužytk měś. Wopśimuju wjele funkcijow, mjazy drugim:

Pšosym pódprějśo nas!