Turinys
Rodyklė 🔎︎

# Pitono skriptų iškvietimas iš „Basic“

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

- Galimas ComputerName nustatymas arba OSName aptikimas,

- „Basic“ FileLen() funkcija ir com.sun.star.ucb.SimpleFileAccess.getSize() API funkcija parodo 2 G baitų failo dydžio viršutinę ribą, kurią Pitonas padeda įveikti,

- com.sun.star.util.PathSettings gali būti normalizuota,

- ir žymiai daugiau.

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:

- Platform.py

             # -*- coding: utf-8 -*-
             from __future__ import unicode_literals

             import platform

             def computer_name() -> str:
                 return platform.node()

             def OSname() -> str:
                 return platform.system()

- Os/Path.py

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

- argparse Komandos eilutės parinkčių analizatorius, argumentai ir komandos

- cmath Mathematinė funkcija kompleksiniams skaičiams

- csv CSV failų skaitymas ir rašymas

- datetime Tikros datos ir laiko tipai

- json JSON koduotuvas ir dekoduotuvas

- math Mathematinės funkcijos

- re Reguliariųjų reiškinių operacijos

- socket Žemo lygio tinklo sąsaja

- sys Sisteminiai parametrai ir funkcijos

- unittest and trace Sekciją testuojanti struktūra ir Pitono stebėjimų vykdymas

- xml.etree.ElementTree Elementų medžio XML API

Susijusios temos

Kreipiamasi į Basic kalbos makrokomandas iš Python kalbos

„LibreOffice Basic“ žinynas

LibreOffice Python skriptai žinynas