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!