Pomoc za LibreOffice 24.8
Wuwołanje skriptow Python z makrow LibreOffice jo móžne, a wužytne funkcije su k dispoziciji, na pśikład:
Identifikacija ComputerName abo namakanje OSName stej móžnej,
Funkcija Basic FileLen()a com.sun.star.ucb.SimpleFileAccess. API-funkcija getSize() ma górnu granicu 2 gigabajtowu datajoweje wjelikosći, kótaruž Python wopytujo zmejstrowaś,
com.sun.star.util.PathSettings dajo se normalizěrowaś,
a wjele wěcej.
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 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
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ó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:
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)
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
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:
argparse Parser za opcije pśikazoweje smužki, argumenty a pódpśikaze
cmath Matematiske funkcije za kompleksne licby
csv CSV-dataje cytaś a pisaś
datetime Cyste datumowe a casowe typy
json Encoder a decoder JSON
math Matematiske funkcije
re Operacije z regularnymi wurazami
socket Seśowe zwězowańske městno niskeje rowniny
sys Specifiske parametry a funkcije systema
unittest a trace Wokolina za testowanje jadnotkow a slědowanje wuwjeźenjow Python
xml.etree.ElementTree API ElementTree XML