Pitono skriptų iškvietimas iš „Basic“

Pitono skriptų iškvietimas iš „LibreOffice Basic“ makrokomandų yra galimas, galioja šios vertingos savybės:

tip

Rekomenduojamos deramas „LibreOffice Basic“ ir programų sąsajos (API) savybių prioritetas vykdant iškvietimus iš „Basic“ ir Pitono kalbų, ir iš „JavaScript“ ar bet kurių kitų variklių skriptų.


Pitono skriptų atnaujinimas

Pitono skriptai gali būti asmeniniai, bendrinami ar įterpti į dokumentus. Kad galėtume juos vykdyti, „LibreOffice Basic“ reikia nurodyti Pitono skripto vietą. Atitinkamų UNO objektų sąsajų vietų nustatymas com.sun.star.script.provider.XScript leidžia vykdyti Pitono skriptus:


         Option Explicit
             
         Public Function GetPythonScript(macro As String, _
                 Optional location As String) As com.sun.star.script.provider.Xscript
             ''' Imkite Pitono skripto objektą prieš jo vykdymą
             ' Argumentai:
             '    makrokomanda: kaip „library/module.py$macro“ arba „module.py$macro“
             '    vieta: kaip „dokumentas“, „bendrinimas“, „vartotojas“ arba ENUM(eration)
             ' Rezultatas:
             '   pateikiama com.sun.star.script.provider.XScript UNO paslauga'''
             If IsMissing(location) Then location = "user"
             Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
             Nepakankamas „sp“ kaip objekto ' com.sun.star.script.provider.XScriptProvider suderinamumas
             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
      

Pitono skriptų vykdymas

The LibreOffice Application Programming Interface (API) Scripting Framework supports inter-language script execution between Python and Basic, or other supported programming languages for that matter. Arguments can be passed back and forth across calls, provided that they represent primitive data types that both languages recognize, and assuming that the Scripting Framework converts them appropriately.

Sintaksė

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

opSysName = script.invoke(Array(), in_outs, Array()) ' į_iš yra masyvas

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

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

Įterptųjų skriptų pavyzdžiai

Žemiau „ComputerName“, ir „GetFilelen“ programos kviečia Pitono komponentus, naudojamos anksčiau minėtą GetPythonScript funkciją. Išimčių apdorojimas nedetalizuoajmas.


         Option Explicit
         Palaikoma parinktis „Suderinamumas ' Savybės“
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get ComputerName As String
             '''Darbo stoties pavadinimas'''
             scr = GetPythonScript("Platform.py$computer_name", "document")
             ComputerName = scr.invoke(Array(), Array(), Array())
         End Property ' ComputerName
             
         Private Function GetFilelen(systemFilePath As String) As Currency
             '''Failo dydis baitais'''
             scr = GetPythonScript("Os/Path.py$get_size", Script.ISEMBEDDED)
             GetFilelen = scr.invoke(Array(systemFilePath), Array(), Array(),)
         End Function ' GetFilelen
             
         Private Type _SCRIPT_LOCATION
             ISEMBEDDED kaip „String ' document“ skriptas
             ISPERSONAL kaip „String ' user“ skriptas
             ISSHARED kaip „String ' LibreOffice“ makrokomanda
         End Type ' _SCRIPT_LOCATION
             
         Public Function Script() As Object ' Text enumeration
             Static enums As _SCRIPT_LOCATION : With enums
             If .ISEMBEDDED = "" Then
                 .ISEMBEDDED = "document" ' documento skriptas
                 .ISPERSONAL = "user" ' vartotojo skriptas
                 .ISSHARED = "share" ' „LibreOffice“ makrokomanda
             End If : End With ' enums
             Script = enums
         End Function ' Script
      

Iškviečiami du skirtingi Pitono moduliai. Jie gali būti arba įterpiami į esamą dokumentą, arba laikomi failų sistemoje. Aiškumo dėlei argumentų tipai netikrinami:


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

Asmeninių arba bendrintų skriptų pavyzdžiai

Asmeninių ar bendrinamų Pitono skriptų iškvietos mechanizmas yra identiškas įterptiniams skriptams. Bibliotekų vardai susieti su katalogais. „LibreOffice“ vartotojo profilio skaičiavimas ir bendrinamų modulių sisteminių failų keliai gali būti vykdomi, kaip nurodoma sesijos informacijoje. Minimos programos OSName, Sveikas, pasauli ir Normalizuotas kelias kreipiasi į Pitono dalis, naudodamos anksčiau paminėtą GetPythonScript funkciją. Išimtys nedetalizuojamos.


         Option Explicit
         Palaikoma parinktis „Suderinamumas ' Savybės“
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get OSName As String
             '''Platformos pavadinimas, pavyzdžiui, „Linux“, „Darwin“ arba „Windows“'''
             scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
             OSName = scr.invoke(Array(), Array(), Array()) 
         End Property ' OSName
             
         Private Sub HelloWorld()
             '''Pitonas bendrina „LibreOffice“ pavyzdį'''
             scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
             scr.invoke(Array(), Array(), Array(),)
         End Sub ' HelloWorld
             
         Public Function NormalizePath(systemFilePath As String) As String
             '''Juostos nereikalingos '\..' '''
             scr = GetPythonScript("Os/Path.py$normalyze", "user")
             NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
         End Function ' NormalizePath
      

Pitono standartiniai moduliai

„LibreOffice“ įterptasis Pitonas turi daug naudingų standartinių bibliotekų. Jie palaiko gausių savybių rinkinį, pavyzdžiui:

Paremkite mus!