Richiamare script Python da Basic

È possibile richiamare script Python dalle Collabora Office macro di Basic e si possono ottenere valide funzioni, come ad esempio:

tip

È consigliabile un adeguato approccio a Collabora Office Basic e ad Application Programming Interface (API) prima di eseguire funzioni di chiamata tra linguaggi Basic, Python, JavaScript o qualsiasi altro motore di script.


Richiamo degli script Python

Gli script Python possono essere personali, condivisi o incorporati nei documenti. Per poterli eseguire, Collabora Office Basic deve disporre della posizione degli script Python. L'individuazione di oggetti UNO compatibili con l'interfaccia com.sun.star.script.provider.XScript consente l'esecuzione di script Python:

Option Explicit

Public Function GetPythonScript(macro As String, _
        Optional location As String) As com.sun.star.script.provider.Xscript
    ''' Recupera l'oggetto di script Python prima dell'esecuzione
    ' Argomenti:
    '    macro   : come "library/module.py$macro" o "module.py$macro"
    '    location: come "document", "share", "user" o ENUM(eration)
    ' Risultato:
    '    individuato il servizio di UNO com.sun.star.script.provider.XScript'''
    If IsMissing(location) Then location = "user"
    Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
    Dim sp As Object ' compatibile con com.sun.star.script.provider.XScriptProvider
    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

Esecuzione degli script Python

Lo Application Programming Interface (API) Scripting Framework (Infrastruttura per lo scripting) di Collabora Office supporta l'esecuzione interlinguistica di script tra Python e Basic o altri linguaggi di programmazione supportati per tale scopo. Gli argomenti possono essere passati tra le chiamate avanti e indietro, posto che essi rappresentino tipi di dati primitivi riconoscibili da entrambi i linguaggi, e presupponendo che lo Scripting Framework li converta in modo appropriato.

Sintassi

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

opSysName = script.invoke(Array(), in_outs, Array()) ' in_out è una matrice

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

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

Esempi di script incorporati

Le routine seguenti ComputerName e GetFilelen richiamano le corrispondenti controparti Python mediante la funzione GetPythonScript precedentemente menzionata. La gestione delle eccezioni non è dettagliata.

Option Explicit
Option Compatible ' Sono supportate le proprietà

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

Private Property Get ComputerName As String
    '''Nome 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
    '''Dimensione file in 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 ' script documento
    ISPERSONAL As String ' script utente
    ISSHARED As String ' macro di Collabora Office
End Type ' _SCRIPT_LOCATION

Public Function Script() As Object ' Text enumeration
    Static enums As _SCRIPT_LOCATION : With enums
    If .ISEMBEDDED = "" Then
        .ISEMBEDDED = "document" ' script documento
        .ISPERSONAL = "user" ' script utente
        .ISSHARED = "share" ' macro di Collabora Office
    End If : End With ' enums
    Script = enums
End Function ' Script

Vengono richiamati due diversi moduli Python. Possono essere incorporati nel documento corrente o memorizzati nel file system. Il controllo del tipo di argomento per chiarezza viene tralasciato:

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

Esempi di script personali o condivisi

Il meccanismo di chiamata per script Python personali o condivisi è identico a quello degli script incorporati. I nomi delle librerie sono mappati in cartelle. L'elaborazione del profilo utente Collabora Office e dei percorsi dei file di sistema relativi ai moduli condivisi si possono eseguire come descritto in Ottenere informazioni sulla sessione. Le routine seguenti OSName, HelloWorld e NormalizePath richiamano le corrispondenti controparti Python mediante la funzione GetPythonScript precedentemente menzionata. La gestione delle eccezioni non è dettagliata.

Option Explicit
Option Compatible ' Sono supportate le proprietà

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

Private Property Get OSName As String
    '''Nome piattaforma come "Linux", "Darwin" o "Windows"'''
    scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
    OSName = scr.invoke(Array(), Array(), Array())
End Property ' OSName

Private Sub HelloWorld()
    '''Esempio condiviso Python di Collabora Office'''
    scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
    scr.invoke(Array(), Array(), Array(),)
End Sub ' HelloWorld

Public Function NormalizePath(systemFilePath As String) As String
    '''Estrae le '\..' superflue nel percorso'''
    scr = GetPythonScript("Os/Path.py$normalyze", "user")
    NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
End Function ' NormalizePath

Moduli Python standard

I moduli Python incorporati in Collabora Office contengono molte librerie standard da cui trarre vantaggio. Offrono una ricca gamma di funzioni, comprese, ma non esclusivamente, le seguenti:

Sosteneteci!