Κλήση Python Scripts από Basic

Κλήση δέσμης ενεργειών (scripts) Python από μακροεντολές Basic του LibreOffice είναι εφικτή και σημαντικά χαρακτηριστικά μπορούν να ληφθούν όπως:

tip

Συνιστάται λογική έκθεση στο LibreOffice Basic και σε γνωρίσματα της διασύνδεσης προγραμματισμού εφαρμογών (API) πριν την εκτέλεση διαγλωσσικών κλήσεων από Basic σε Python, σε JavaScript ή οποιονδήποτε άλλο μηχανισμό δεσμών ενεργειών.


Ανάκτηση δεσμών ενεργειών Python

Οι δέσμες ενεργειών Python μπορεί να είναι προσωπικές, κοινόχρηστες, ή ενσωματωμένες σε έγγραφα. Για να τις εκτελέσετε, το LibreOffice Basic πρέπει να παρέχεται με θέσεις δεσμών ενεργειών Python. Ο εντοπισμός com.sun.star.script.provider.XScript σύνδεσης συμβατής με αντικείμενα UNO επιτρέπει την εκτέλεση δεσμών ενεργειών Python:


         Option Explicit
             
         Public Function GetPythonScript(macro As String, _
                 Optional location As String) As com.sun.star.script.provider.Xscript
             '''Αιχμαλωσία αντικειμένου δέσμης ενεργειών Python πριν την εκτέλεση
             'Ορίσματα:
             '    macro   : ως "library/module.py$macro" ή "module.py$macro"
             '    θέση: ως "document", "share", "user" ή ENUM(eration)
             'Αποτέλεσμα:
             '    εντοπίστηκε com.sun.star.script.provider.XScript UNO υπηρεσία'''
             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 συμβατό
             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

Το Πλαίσιο δέσμης ενεργειών του LibreOffice Διασύνδεση προγραμματισμού εφαρμογών (API) υποστηρίζει τη διαγλωσσική εκτέλεση σεναρίων μεταξύ Python και Basic ή άλλες υποστηριζόμενες γλώσσες προγραμματισμού για αυτό το θέμα. Τα ορίσματα μπορούν να διαβιβαστούν πέρα δώθε σε κλήσεις, υπό την προϋπόθεση ότι αντιπροσωπεύουν πρωτογενείς τύπους δεδομένων που αναγνωρίζουν και οι δύο γλώσσες και υποθέτοντας ότι το Πλαίσιο Σεναρίων τα μετατρέπει κατάλληλα.

Σύνταξη

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

opSysName = script.invoke(Array(), in_outs, Array()) ' in_out είναι ένας πίνακας

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

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

Ενσωματωμένα παραδείγματα δεσμών ενεργειών

Κάτω από τις ρουτίνες ComputerName και GetFilelen καλούνται οι αντίστοιχές τους Python, χρησιμοποιώντας την προμνημονευθείσα συνάρτηση GetPythonScript. Η διαχείριση της εξαίρεσης δεν είναι λεπτομερής.


         Option Explicit
         Option Compatible 'Οι ιδιότητες υποστηρίζονται
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get ComputerName As String
             '''Όνομα του σταθμού εργασίας'''
             scr = GetPythonScript("Platform.py$computer_name", "document")
             ComputerName = scr.invoke(Array(), Array(), Array())
         End Property ' ComputerName
             
         Private Function GetFilelen(systemFilePath As String) As Currency
             '''Μέγεθος αρχείου σε ψηφιολέξεις (bytes)'''
             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 ' δέσμη ενεργειών εγγράφου
             ISPERSONAL As String ' δέσμη ενεργειών χρήστη
             ISSHARED As String ' μακροεντολή του LibreOffice
         End Type ' _SCRIPT_LOCATION
             
         Public Function Script() As Object ' Text enumeration
             Static enums As _SCRIPT_LOCATION : With enums
             If .ISEMBEDDED = "" Then
                 .ISEMBEDDED = "document" ' δέσμη ενεργειών εγγράφου
                 .ISPERSONAL = "user" ' δέσμες ενεργειών χρήστη
                 .ISSHARED = "share" ' μακροεντολή του LibreOffice
             End If : End With ' enums
             Script = enums
         End Function ' Script
      

Καλούνται δύο διαφορετικά αρθρώματα Python. Μπορούν είτε να ενσωματωθούν στο τρέχον έγγραφο, είτε να αποθηκευτούν στο σύστημα αρχείων. Ο έλεγχος τύπου ορίσματος παραλείπεται για σαφήνεια:


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

Παραδείγματα προσωπικών ή κοινόχρηστων δεσμών ενεργειών

Ο μηχανισμός κλήσης για προσωπικές ή κοινόχρηστες δέσμες ενεργειών Python είναι ταυτόσημος με αυτόν των ενσωματωμένων δεσμών ενεργειών. Τα ονόματα βιβλιοθηκών απεικονίζονται σε φακέλους. Ο υπολογισμός των διαδρομών αρχείων συστήματος της κατατομής (προφίλ) χρήστη του LibreOffice και των κοινόχρηστων αρθρωμάτων μπορεί να εκτελεστεί όπως περιγράφεται λεπτομερώς στη Λήψη πληροφοριών συνεδρίας. Κάτω από το OSName, οι ρουτίνες HelloWorld and NormalizePath καλούν τις αντίστοιχες τους Python, χρησιμοποιώντας την προαναφερόμενη συνάρτηση GetPythonScript. Ο χειρισμός εξαιρέσεων δεν περιγράφεται λεπτομερώς.


         Option Explicit
         Option Compatible 'Οι ιδιότητες υποστηρίζονται
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get OSName As String
             '''Το όνομα λειτουργικού συστήματος όπως "Linux", "Darwin" ή "Windows"'''
             scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
             OSName = scr.invoke(Array(), Array(), Array()) 
         End Property ' OSName
             
         Private Sub HelloWorld()
             '''Κοινόχρηστο δείγμα του LibreOffice Python'''
             scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
             scr.invoke(Array(), Array(), Array(),)
         End Sub ' HelloWorld
             
         Public Function NormalizePath(systemFilePath As String) As String
             '''Αφαίρεση περιττού '\..' σε διαδρομή'''
             scr = GetPythonScript("Os/Path.py$normalyze", "user")
             NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
         End Function ' NormalizePath
      

Τυπικά αρθρώματα Python

Το ενσωματωμένο Python του LibreOffice περιέχει πολλές τυπικές βιβλιοθήκες για να επωφεληθείτε. Φέρουν πλούσιο σύνολο γνωρισμάτων, μεταξύ άλλων:

Παρακαλούμε, υποστηρίξτε μας!