Klicanje skriptov Python iz Basica

Skripte Python lahko kličete iz makrov LibreOffice Basic, s čimer pridobite pomembne funkcionalnosti, kot so:

tip

Priporočljivo je, da se dobro spoznate z jezikom LibreOffice Basic in vmesnikom Application Programming Interface (API), preden se iz skripte v Basicu sklicujete na Python, JavaScript ali drug skriptni mehanizem.


Pridobivanje skriptov v jeziku Python

Skripti Python so lahko zasebni, v skupni rabi ali vdelani v dokumente. Da bi jih izvajali, mora LibreOffice Basic poznati lokacije skriptov Python. Izvajanje skriptov Python omogočite z iskanjem predmetov UNO, ki so skladni z vmesnikom com.sun.star.script.provider.XScript:


         Option Explicit
             
         Public Function GetPythonScript(macro As String, _
                 Optional location As String) As com.sun.star.script.provider.Xscript
             ''' Zagrabi predmet skripta Python pred izvajanjem
             ' Argumenti:
             '    macro/makro   : kot "library/module.py$macro" ali "module.py$macro"
             '    location/mesto: kot "document", "share", "user" ali ENUM(eration/oštevilčenje)
             ' Rezultat:
             '    locirana UNO-storitev com.sun.star.script.provider.XScript'''
             If IsMissing(location) Then location = "user"
             Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
             Dim sp As Object ' Združljivo s 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
      

Izvajanje skriptov Python

Ogrodje skriptov vmesnika programiranja LibreOffice API (angl. Application Programming Interface) podpira izvajanje skriptov med Pythonom in Basicom ter drugimi podprtimi programskimi jeziki. Argumente lahko podajate skozi klice, če gre za primitivne vrste podatkov, ki jih prepoznata oba jezika, in če jih ogrodje API ustrezno pretvori.

Skladnja

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

imeOpSistema = script.invoke(Array(), in_outs, Array()) ' in_outs je matrika

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

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

Primeri vdelanih skriptov

Spodnji rutini ComputerName in GetFilelen kličeta svoja ekvivalenta v Pythonu z uporabo prej omenjene funkcije GetPythonScript. Izjeme niso podrobno obravnavane.


         Option Explicit
         Option Compatible ' Lastnosti so podprte
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get ComputerName As String
             '''Ime delovne postaje'''
             scr = GetPythonScript("Platform.py$computer_name", "document")
             ComputerName = scr.invoke(Array(), Array(), Array())
         End Property ' ComputerName
             
         Private Function GetFilelen(systemFilePath As String) As Currency
             '''Velikost datoteke v bajtih'''
             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 ' skript iz dokumenta
             ISPERSONAL As String ' skript uporabnika
             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 As String ' skript iz dokumenta
                 .ISPERSONAL = "user" ' skripti uporabnika
                 .ISSHARED = "share" ' Makro LibreOffice
             End If : End With ' enums
             Script = enums
         End Function ' Script
      

Klicana sta dva različna modula Python. Lahko sta vdelana v trenutni dokument ali shranjena v datotečnem sistemu. Preverjanje vrste argumentov je zavoljo jasnosti preskočeno:


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

Primeri osebnih skriptov in skriptov v skupni rabi

Mehanizem za klicanje zasebnih ali skupnih skriptov Python je identičen tistemu za vdelane skripte. Imena knjižnic se preslikajo v mape. Izračun uporabniškega profila LibreOffice in datotečnih poti do modulov v skupni rabi je možno opraviti po navodilih Pridobivanje informacij o seji. Spodnji podprogrami OSName, HelloWorld in NormalizePath kličejo svoje ekvivalente v Pythonu z uporabo prej omenjene funkcije GetPythonScript. Izjeme niso podrobno obravnavane.


         Option Explicit
         Option Compatible ' Lastnosti so podprte
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get OSName As String
             '''Ime platforme kot »Linux«, »Darwin« ali »Windows«'''
             scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
             OSName = scr.invoke(Array(), Array(), Array()) 
         End Property ' OSName
             
         Private Sub HelloWorld()
             '''Vzorec LibreOffice Python v skupni rabi'''
             scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
             scr.invoke(Array(), Array(), Array(),)
         End Sub ' HelloWorld
             
         Public Function NormalizePath(systemFilePath As String) As String
             '''Odstrani odvečne '\..' v poti'''
             scr = GetPythonScript("Os/Path.py$normalyze", "user")
             NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
         End Function ' NormalizePath
      

Standardni moduli Python

V LibreOffice vdelani Python vsebuje številne standardne knjižnice, ki so vam lahko v pomoč, saj obsegajo bogat nabor funkcij, kot so:

Podprite nas!