Pagtawag sa Python Scripts mula sa Basic

Posible ang pagtawag sa mga script ng Python mula sa LibreOffice Basic macros, at maaaring makuha ang mahahalagang feature gaya ng:

tip

Isang makatwirang pagkakalantad sa LibreOffice Basic at sa Application Programming Interface (API) Inirerekomenda ang mga feature bago magsagawa ng mga inter-language na tawag mula Basic hanggang Python, hanggang JavaScript o anumang iba pang script engine.


Kinukuha ang Python Scripts

Ang mga script ng Python ay maaaring personal, ibinahagi, o naka-embed sa mga dokumento. Upang maisakatuparan ang mga ito, ang LibreOffice Basic ay kailangang mabigyan ng mga lokasyon ng script ng Python. Paghanap com.sun.star.script.provider.XScript ang mga bagay na sumusunod sa interface ng UNO ay nagpapahintulot sa pagpapatupad ng mga script ng Python:


         Option Explicit
             
         Public Function GetPythonScript(macro As String, _
                 Optional location As String) As com.sun.star.script.provider.Xscript
             ''' Grab Python script object bago isagawa
             ' Mga argumento:
             ' macro : bilang "library/module.py$macro" o "module.py$macro"
             ' lokasyon: bilang "dokumento", "share", "user" o ENUM(eration)
             ' Resulta:
             ' matatagpuan com.sun.star.script.provider.XScript UNO serbisyo'''
             If IsMissing(location) Then location = "user"
             Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
             Dim sp Bilang Object ' 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
      

Pagpapatupad ng Python Scripts

Ang LibreOffice Application Programming Interface (API) Scripting Framework ay sumusuporta sa inter-language script execution sa pagitan ng Python at Basic, o iba pang sinusuportahang programming language para sa bagay na iyon. Ang mga argumento ay maaaring ipasa nang pabalik-balik sa mga tawag, sa kondisyon na kinakatawan ng mga ito ang mga primitive na uri ng data na kinikilala ng parehong wika, at ipagpalagay na ang Scripting Framework ay na-convert ang mga ito nang naaangkop.

Syntax

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

opSysName = script.invoke(Array(), in_outs, Array()) ' ang in_out ay isang Array

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

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

Mga Halimbawa ng Naka-embed na Script

sa ibaba ComputerName , at GetFilelen Ang mga gawain ay tumatawag sa kanilang mga katapat na Python, gamit ang nabanggit GetPythonScript function. Hindi detalyado ang paghawak ng exception.


         Option Explicit
         Option Compatible ' Ang mga Properties ay sinusuportahan
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get ComputerName As String
             '''Pangalan ng workstation'''
             scr = GetPythonScript("Platform.py$computer_name", "document")
             ComputerName = scr.invoke(Array(), Array(), Array())
         End Property ' ComputerName
             
         Private Function GetFilelen(systemFilePath As String) As Currency
             '''Laki ng file sa bytes'''
             scr = GetPythonScript("Os/Path.py$get_size", Script.ISEMBEDDED)
             GetFilelen = scr.invoke(Array(systemFilePath), Array(), Array(),)
         End Function ' GetFilelen
             
         Private Type _SCRIPT_LOCATION
             ISEMBEDDED Bilang String ' script ng dokumento
             ISPERSONAL Bilang String ' user script
             ISHARED Bilang String ' LibreOffice macro
         End Type ' _SCRIPT_LOCATION
             
         Public Function Script() As Object ' Text enumeration
             Static enums As _SCRIPT_LOCATION : With enums
             If .ISEMBEDDED = "" Then
                 .ISEMBEDDED = "dokumento" ' script ng dokumento
                 .ISPERSONAL = "user" ' mga script ng user
                 .ISSHARED = "share" ' LibreOffice macro
             End If : End With ' enums
             Script = enums
         End Function ' Script
      

Dalawang magkaibang Python module ang tinatawag. Maaari silang mai-embed sa kasalukuyang dokumento, alinman ay maiimbak sa file system. Nilaktawan ang pagsusuri sa uri ng argumento para sa kalinawan:


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

Mga Halimbawa ng Personal o Nakabahaging Script

Ang mekanismo ng pagtawag para sa personal o nakabahaging mga script ng Python ay kapareho ng sa mga naka-embed na script. Ang mga pangalan ng library ay nakamapa sa mga folder. Ang pag-compute ng LibreOffice user profile at shared modules system file path ay maaaring isagawa bilang detalyado sa Pagkuha ng impormasyon ng session . sa ibaba OSName , HelloWorld at NormalizePath Ang mga gawain ay tumatawag sa kanilang mga katapat na Python, gamit ang nabanggit GetPythonScript function. Hindi detalyado ang paghawak ng exception.


         Option Explicit
         Option Compatible ' Ang mga Properties ay sinusuportahan
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get OSName As String
             '''Platform name bilang "Linux", "Darwin" o "Windows"'''
             scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
             OSName = scr.invoke(Array(), Array(), Array()) 
         End Property ' OSName
             
         Private Sub HelloWorld()
             '''Nagbahagi si LibreOffice Python ng sample'''
             scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
             scr.invoke(Array(), Array(), Array(),)
         End Sub ' HelloWorld
             
         Public Function NormalizePath(systemFilePath As String) As String
             '''Strip kalabisan '\..' sa landas'''
             scr = GetPythonScript("Os/Path.py$normalyze", "user")
             NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
         End Function ' NormalizePath
      

Mga karaniwang module ng Python

Ang LibreOffice na naka-embed na Python ay naglalaman ng maraming karaniwang mga aklatan upang makinabang. Mayroon silang maraming hanay ng tampok, tulad ng ngunit hindi limitado sa:

Mangyaring suportahan kami!