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

tip

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.


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

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