Edukiak

# Python scriptak Basic-etik deitzea

Posible da Python scriptak deitzea LibreOffice Basic makroetatik, eta horrela eginbide erabilgarriak eskuratu daitezke, adibidez:

- posible dira ComputerName identifikazioa edo OSName detekzioa,

- Basic FileLen() funtzioak eta com.sun.star.ucb.SimpleFileAccess.getSize() API funtzioak 2 gigabyteko gehieneko fitxategi-tamaina dute, eta Pythonek hori gainditzen laguntzen du,

- com.sun.star.util.PathSettings normalizatua izan daiteke,

- eta askoz gehiago.

LibreOffice Basic eta Application Programming Interface (API) nahiko ongi ezagutzea komeni da lengoaien arteko deiak (Basic lengoaiatik Pythonera, JavaScriptera edo beste edozein script-lengoaiara) egin baino lehen.

## Python scriptak atzitzea

Python scriptak pertsonalak, partekatuak edo dokumentuetan kapsulatuak izan daitezke. Haiek exekutatzeko, Python scripten kokalekuak esan behar zaizkio LibreOffice Basic-i. com.sun.star.script.provider.XScript interfazearekin bat datozen UNO objektuak lokalizatuta, Python scriptak exekutatu daitezke:

             Option Explicit

             Public Function GetPythonScript(macro As String, _
                     Optional location As String) As com.sun.star.script.provider.Xscript
                 ''' Hartu Python script objektua exekuzioa baino lehen
                 ' Argumentuak:
                 '    macro   : "library/module.py$macro" edo "module.py$macro" modura
                 '    location: "document", "share", "user" ENUM(eration) modura
                 ' Emaitza:
                 '    com.sun.star.script.provider.XScript UNO service''' aurkitu da
                 If IsMissing(location) Then location = "user"
                 Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
                 Dim sp As Object ' com.sun.star.script.provider.XScriptProvider bateragarria
                 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

## Python scriptak exekutatzea

LibreOffice Application Programming Interface (API) scriptgintzako lan-markoak lengoaien arteko scripten exekuzioa onartzen du Python eta Basic lengoaien kasuan, baina baita onartutako beste edozein programazio-lengoaiaren kasuan ere. Argumentuak atzera eta aurrera pasatu daitezke deietan, bi lengoaiek ezagutzen dituzten jatorrizko datu motak ordezkatzen badituzte, eta scriptgintzako lan-markoak haiek modu egokian bihurtuko dituztela onartuta.

### Sintaxia

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

opSysName = script.invoke(Array(), in_outs, Array()) ' in_out matrize bat da

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

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

### Script kapsulatuen adibideak

Azpiko ComputerName eta GetFilelen errutinak beren pareko Python scriptei deitzen ari dira, goian aipatutako GetPythonScript funtzioa erabilita. Salbuespenen maneiua ez dago azalduta.

             Option Explicit
             Option Compatible ' Propietateak onartzen dira

             Private scr As Object ' com.sun.star.script.provider.XScript

             Private Property Get ComputerName As String
                 '''Lan-estazioaren izena'''
                 scr = GetPythonScript("Platform.py$computer_name", "document")
                 ComputerName = scr.invoke(Array(), Array(), Array())
             End Property ' ComputerName

             Private Function GetFilelen(systemFilePath As String) As Currency
                 '''Fitxategi-tamaina bytetan'''
                 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 ' dokumentu-scripta
                 ISPERSONAL As String ' erabiltzaile-scripta
                 ISSHARED As String ' LibreOffice makroa
             End Type ' _SCRIPT_LOCATION

             Public Function Script() As Object ' Text enumeration
                 Static enums As _SCRIPT_LOCATION : With enums
                 If .ISEMBEDDED = "" Then
                     .ISEMBEDDED = "document" ' dokumentu-scripta
                     .ISPERSONAL = "user" ' erabiltzaile-scriptak
                     .ISSHARED = "share" ' LibreOffice makroa
                 End If : End With ' enums
                 Script = enums
             End Function ' Script

Bi Python modulu desberdin deituko dira. Uneko dokumentuan kapsulatuta egon daitezke edo fitxategi-sisteman biltegiratuta egon daitezke. Argumentu motaren egiaztatzea ez da erakusten, adibidea argiago erakusteko:

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

### Script pertsonal edo partekatuen adibideak

Python script pertsonal edo partekatuetarako deitze-mekanismoa kapsulatutako scripten bera da. Liburutegi-izenak karpetekin mapatuta daude. LibreOffice erabiltzaile-profila eta partekatutako moduluen sistemako fitxategi-bideak Saioaren informazioa eskuratzea atalean azaldutako moduan kalkulatu daitezke. Azpiko OSName, HelloWorld eta NormalizePath errutinak beren parekoak diren Python scriptak deitzen ari dira, goian aipatutako GetPythonScript funtzioa erabilita. Salbuespenen maneiua ez dago azalduta.

             Option Explicit
             Option Compatible ' Propietateak onartzen dira

             Private scr As Object ' com.sun.star.script.provider.XScript

             Private Property Get OSName As String
                 '''Plataforma-izena: "Linux", "Darwin" edo "Windows"'''
                 scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
                 OSName = scr.invoke(Array(), Array(), Array())
             End Property ' OSName

             Private Sub HelloWorld()
                 '''LibreOffice Python lagin partekatua'''
                 scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
                 scr.invoke(Array(), Array(), Array(),)
             End Sub ' HelloWorld

             Public Function NormalizePath(systemFilePath As String) As String
                 '''Kendu soberan dauden '\..' bide-izenetik'''
                 scr = GetPythonScript("Os/Path.py$normalyze", "user")
                 NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
             End Function ' NormalizePath

## Python modulu estandarrak

LibreOffice suitearekin kapsulatutako Pythonek liburutegi estandar asko ditu lanerako. Eginbideen multzo aberatsa du, adibidez honakoak:

- argparse analizatzailea komando-lerroko aukeretarako, argumentuetarako eta azpikomandoetarako

- cmath Funtzio matematikoak zenbaki konplexuetarako

- csv CSV fitxategiak irakurtzea eta idaztea

- datetime Benetako data eta ordu motak

- json JSON kodetzailea eta deskodetzailea

- math Funtzio matematikoak

- re Adierazpen erregularren eragiketak

- socket Maila baxuko sare-interfazea

- sys Sistemarenak espezifikoak diren parametroak eta funtzioak

- unittest eta trace Unitate-proben lan-markoa eta Python exekuzioaren segimendua

- xml.etree.ElementTree ElementTree XML APIa

Erlazionatutako gaiak

Basic makroak deitzea Pythonetik

LibreOffice Basic laguntza

LibreOffice Python scripten laguntza