Innhald
Innhaldsliste 🔎︎

# Oppkall av Python-skript frå Basic

Det er råd å kalla opp Python-skript frå LibreOffice, noko som kan brukast for å laga nyttige funksjonar, slik som

- Det er mogleg å identifisera ComputerName og OSName,

- Basic-funksjonane FileLen() og com.sun.star.ucb.SimpleFileAccess.getSize(). API-funksjonen har ei øvre grense for filstorleik på 2 Gigabyte. Python kan brukast for å heva denne grensa.

- com.sun.star.util.PathSettings kan normaliserast,

- og mange fleire.

Rett handsaming av LibreOffice Basic og Application Programming Interface (API) vert tilrådd før du kallar opp andre programmeringsspråk frå Basic, som for eksempel til Python, Java eller ein annan skrift-motor.

## Oppkall av Python-skript

Python-skript kan vera private, delte eller innebygde i dokument. For å kunna køyra dei, må LibreOffice Basic vera utstyrt med stiar for Python-skript. Ved å finna com.sun.star.script.provider.XScript grensesnitt-kompatible UNO-objekt kan du køyra Python-skript:

             Option Explicit

             Public Function GetPythonScript(macro As String, _
                     Optional location As String) As com.sun.star.script.provider.Xscript
                 ''' Får Python-skript-objekt før utføringa
                 ' Argument:
                 '    makro   : som "library/module.py$macro" eller "module.py$macro"
                 '    plassering: som "document", "share", "user" eller ENUM(eration)
                 ' Resultat:
                 '    funne 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 As Object ' com.sun.star.script.provider.XScriptProvider-kompatibel
                 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

## Køyra Python-skript

Skriptnettverket LibreOffice Application Programming Interface (API) har støtte for å køyra blanda skript mellom Python og Basic, eller andre programmeringsspråk for den saks skuld. Såleis kan argument sendast mellom språka dersom dei er såkalla primitive datatypar som begge språka forstår og at dei vert konverterte korrekt.

### Syntaks

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

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

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

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

### Eksempel på innebygde skript

Under rutinane ComputerName og GetFilelen vert dei tilsvarande Pytonrutinane kalla opp med dei tidlegare nemnde funksjonane GetPythonScript . Unntakshandsaminga er ikkje detaljert.

             Option Explicit
             Option Compatible ' Støtte for eigenskapar

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

             Private Property Get ComputerName As String
                 '''Namnet på arbeidsstasjonen'''
                 scr = GetPythonScript("Platform.py$computer_name", "document")
                 ComputerName = scr.invoke(Array(), Array(), Array())
             End Property ' ComputerName

             Private Function GetFilelen(systemFilePath As String) As Currency
                 '''Filstorleik 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 As String ' dokument-skript
                 ISPERSONAL As String ' brukarskript
                 ISSHARED As String ' LibreOffice-makro
             End Type ' _SCRIPT_LOCATION

             Public Function Script() As Object ' Text enumeration
                 Static enums As _SCRIPT_LOCATION : With enums
                 If .ISEMBEDDED = "" Then
                     .ISEMBEDDED = "document" ' dokument-skript
                     .ISPERSONAL = "user" ' brukarskript
                     .ISSHARED = "share" ' LibreOffice-makro
                 End If : End With ' enums
                 Script = enums
             End Function ' Script

To ulike Pythonmodellar vert kalla opp. Dei kan anten vera innebygde i det gjeldande dokumentet eller verta lagra i filsystemet. Kontroll av argumenttype er sløyfa for å gjere eksempelet klarare.

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

### Eksempel på personlege og delte skript

Oppkallsmekanismen for personlege og delte Python-skript er den same som for innebygde skript. Biblioteknamna er tilordna mapper. Utrekninga av brukarprofilen for LibreOffice og filstiar for delte modular kan gjerast som i Henta bolkinformasjon. Rutinane OSName, HelloWorld og NormalizePath kallar opp dei tilsvarande Python-rutinane ved hjelp av den tidlegare nemnde funksjonen GetPythonScript. Unntakshandsaminga er ikkje detaljert.

             Option Explicit
             Option Compatible ' Eigenskapane er støtta

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

             Private Property Get OSName As String
                 '''Plattformnamn 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 delt prøve'''
                 scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
                 scr.invoke(Array(), Array(), Array(),)
             End Sub ' HelloWorld

             Public Function NormalizePath(systemFilePath As String) As String
                 '''Overflødig avsnitt '\..' i sti'''
                 scr = GetPythonScript("Os/Path.py$normalyze", "user")
                 NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
             End Function ' NormalizePath

## Python standardmodular

Innebygd Python i LibreOffice inneheld mange standardbibliotek som du kan dra nytte av. Dei har mange funksjonar, mellom andre

- argparse Tolkar for kommandolinjealternativ, argument og underkommandoar

- cmath Matematiske funksjonar for komplekse tal

- csv CSV-filer som kan skrivast til og lesast frå

- datetime Ekte dato- og klokkeslettypar

- json JSON kodar og dekodar

- math Matematiske funksjonar

- re Operasjonar med regulære uttrykk

- socket Nettverksgrensesnitt på lågt nivå

- sys Systemspesifikke parametrar og funksjonar

- unittest og trace Unit-test-Framework og utføring av Python.

- xml.etree.ElementTree ElementTree XML API

Liknande emne

Kalla opp Basic-makroar frå Python

Hjelp for LibreOffice Basic

LibreOffice Pythonskript hjelp