Skripty Python z Basic wuwołać

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

tip

Přisprawny wobchad z LibreOffice Basic a z funkcijemi tykački programowanja nałoženjow (API) je poručomny, prjedy hač so wuwołanja mjez rěčemi wot Basic do Python, do JavaScript abo do druheje skriptoweje rěče wuwjedu.


Skripty Python wotwołać

Skripty Python móža wosobinske, wozjewjene abo do dokumentow zasadźene być. Zo by je wuwjedł, LibreOffice Basic městna skriptow Python trjeba. Pytanje za UNO-objektami, kotrež su kompatibelne z com.sun.star.script.provider.XScript wam zmóžnja, skripty Python wuwjesć:


         Option Explicit
             
         Public Function GetPythonScript(macro As String, _
                 Optional location As String) As com.sun.star.script.provider.Xscript
             ''' Skriptowy objekt Python sej do wuwjedźenja wobstarać
             ' Argumenty:
             ' Makro: jako "library/module.py$macro" abo "module.py$macro"
             ' Městno: jako "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 wuwjesć

Skriptowa wokolina nałoženskeje programowanskeje tykački (Application Programming Interface, API) wuwjedźenje skriptow mjez Python a Basic abo druhimi podpěranymi programowanskimi rěčemi podpěruje. Argumenty dadźa so mjez wuwołanjemi tam a sem přepodać, jeli su primitiwne datowe typy, kotrež wobě rěči znajetej, a pod wuměnjenjom, zo skriptowa wokolina je porjadnje přetworja.

Syntaksa

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

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

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

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

Přikłady za zasadźene skripty

Pod rutinami ComputerName a GetFilelen so jeju pendantaj Python wuwołujetej, z pomocu do toho naspomnjeneje funkcije GetPythonScript. Wobchadźenje z wuwzaćom datailěrowane njeje.


         Option Explicit
         Kompatibelne nastajenje ' Kajkosće so podpěruja
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get ComputerName As String
             '''Mjeno dźěł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 wulkosć 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žiwarski 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žiwarske skripty
                 .ISSHARED = "share" ' makro LibreOffice
             End If : End With ' enums
             Script = enums
         End Function ' Script
      

Dwaj rozdźělnej modulej Python so wuwołujetej. Hodźitej so pak do aktualneho dokumenta zasadźić pak w datajowym systemje składować. Přepruwowanje argumentoweho typa so z přičinow přehladnosće přeskakuje:


         # -*- 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 zhromadnje wužite skripty

Wuwołanski mechanizm za priwatne abo zhromadnje wužite skripty Python je identiski z tym zasadźenych skriptow. Mjena bibliotekow so rjadowakam přirjaduja. Wobličenje systemowych šćežkow wužiwarskich profilow a zhromadnje wužitych modulow da so kaž w Posedźenske informacije wotwołać wopisane přewjesć. Pod rutinami OSName, HelloWorld a NormalizePath swoje pendanty Python wuwołuja, z pomocu horjeka naspomnjeneje funkcije GetPythonScript. Wobchadźenje z wuwzaćom detailěrowane njeje.


         Option Explicit
         Kompatibelne nastajenje ' Kajkosće so podpěruja
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get OSName As String
             '''Platformowe mjeno "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 zhromadny 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
             '''Njetrjebawši wotrězk '\..' w šćežce'''
             scr = GetPythonScript("Os/Path.py$normalyze", "user")
             NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
         End Function ' NormalizePath
      

Standardne module Python

Do LibreOffice zasadźeny Python wjele standardnych bibliotekow wobsahuje, z kotrychž móžeće wužitk ćahnyć. Wobsahuja wjele funkcijow, mjez druhim:

Prošu podpěrajće nas!