Anroper Python-skript fra Basic

Å anrope Python-skript fra LibreOffice Grunnleggende makroer, er mulig, og verdifulle funksjoner kan nås som:

tip

A reasonable exposure to LibreOffice Basic and to Application Programming Interface (API) funksjoner anbefales før du utfører inter-språk samtaler fra Basic til Python, til JavaScript eller en annen skriptmotor.


Henter Python skript

Python-skript kan være personlige, delte eller innebygde i dokumentene. For å kjøre de, må LibreOffice Basic være utstyrt med funksjon, finne Python-skriptplasseringer.com.sun.star.script.provider.XScript grensesnittkompatible UNO-objekter tillater kjøring av Python-skript:


         Option Explicit
             
         Public Function GetPythonScript(macro As String, _
                 Optional location As String) As com.sun.star.script.provider.Xscript
             "'Grip Python-skriptobjekt før utførelse
             ' Argumenter:
             '    makro   : som "library/module.py$macro" eller "module.py$macro"
             '    lokasjon: som "dokument", "del", "bruker" eller ENUM(erasjon)
             ' Resultat:
             '    plassert com.sun.star.script.provider.XScript UNO service'''
             If IsMissing(location) Then location = "user"
             Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
             Dim sp som objekt ' com.sun.star.script.provider.XScriptProvider compatible
             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
      

Kjører Python Skript

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 fourth across calls, providing they represent primitives data types that both languages recognize, and assuming that the Scripting Framework converts them appropriately.

Syntaks

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

opSysName = script.invoke(Array(), in_outs, Array()) ' in_out er en matrise

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

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

Eksempler på innebygde skript

Under Maskinnavn, og GetFilelen rutiner kaller Python-kollegene sine, ved hjelp av nevnte GetPythonScript -funksjon. Unntakshåndteringen er ikke detaljert.


         Option Explicit
         Alternativet, kompatible 'Egenskaper støttes
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get ComputerName As String
             '' 'Arbeidsstasjonsnavn' ''
             scr = GetPythonScript("Platform.py$computer_name", "document")
             ComputerName = scr.invoke(Array(), Array(), Array())
         End Property ' ComputerName
             
         Private Function GetFilelen(systemFilePath As String) As Currency
             '' 'Filstørrelse i byte' ''
             scr = GetPythonScript("Os/Path.py$get_size", Script.ISEMBEDDED)
             GetFilelen = scr.invoke(Array(systemFilePath), Array(), Array(),)
         End Function ' GetFilelen
             
         Private Type _SCRIPT_LOCATION
             ISEMBEDDED Som streng 'dokumentskript
             ISPERSONAL Som streng 'brukerskript
             ISSHARED som Streng ' LibreOffice makro
         End Type ' _SCRIPT_LOCATION
             
         Public Function Script() As Object ' Text enumeration
             Static enums As _SCRIPT_LOCATION : With enums
             If .ISEMBEDDED = "" Then
                 .ISEMBEDDED = "dokument" ' dokument skript
                 .ISPERSONAL = "bruker" ' brukerskript
                 .ISSHARED = "del" ' LibreOffice makro
             End If : End With ' enums
             Script = enums
         End Function ' Script
      

To forskjellige Python-moduler anropes. De kan enten være innebygd i det gjeldende dokumentet, eller lagres i filsystemet. Kontroll av argumenttype hoppes over for tydlighet:


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

Eksempler på personlige eller delte skript

Oppkallemekanismen for personlige eller delte Python-skript er identisk med den for innebygde skript. Biblioteknavn blir tilordnet mapper. Beregning av LibreOffice brukerprofil og systemfilstier for delte moduler kan utføres som beskrevet i Få øktinformasjon . Under OSName , HelloWorld og NormalizePath rutiner kaller Python-kollegene sine ved å bruke nevnte GetPythonScript -funksjon. Unntakshåndteringen er ikke detaljert.


         Option Explicit
         Alternativet kompatible 'Egenskaper støttes
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get OSName As String
             '''Plattform navn som "Linux", "Darwin" eller "Windows"'''
             scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
             OSName = scr.invoke(Array(), Array(), Array()) 
         End Property ' OSName
             
         Private Sub HelloWorld()
             '''LibreOffice Python delte eksempler'''
             scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
             scr.invoke(Array(), Array(), Array(),)
         End Sub ' HelloWorld
             
         Public Function NormalizePath(systemFilePath As String) As String
             '''Strip overflødig '\..' i banen'''
             scr = GetPythonScript("Os/Path.py$normalyze", "user")
             NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
         End Function ' NormalizePath
      

Python standardmoduler

LibreOffice innebygd Python inneholder mange standardbiblioteker å dra nytte av. De har et rikt funksjonssett, for eksempel, men ikke begrenset til:

Supporter oss!