Περιεχόμενα

# Κλήση Python Scripts από Basic

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

- Ταυτοποίηση ComputerName ή εντοπισμός OSName είναι εφικτά,

- Η συνάρτηση Basic FileLen() και com.sun.star.ucb.SimpleFileAccess.getSize() Η συνάρτηση API εμφανίζει ανώτερο όριο μεγέθους αρχείου 2 Gigabytes που το Python βοηθά να ξεπεραστεί,

- com.sun.star.util.PathSettings μπορεί να κανονικοποιηθεί,

- και πολλά άλλα.

Συνιστάται λογική έκθεση στο 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. Μπορούν είτε να ενσωματωθούν στο τρέχον έγγραφο, είτε να αποθηκευτούν στο σύστημα αρχείων. Ο έλεγχος τύπου ορίσματος παραλείπεται για σαφήνεια:

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

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

Ο μηχανισμός κλήσης για προσωπικές ή κοινόχρηστες δέσμες ενεργειών 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 περιέχει πολλές τυπικές βιβλιοθήκες για να επωφεληθείτε. Φέρουν πλούσιο σύνολο γνωρισμάτων, μεταξύ άλλων:

- argparse Ανάλυση επιλογών γραμμής εντολών, ορισμάτων και υποεντολών

- cmath Μαθηματικές συναρτήσεις μιγαδικών αριθμών

- csv Ανάγνωση και εγγραφή αρχείων CSV

- datetime Αυθεντικούς τύπους ημερομηνίας και χρόνου

- json κωδικοποιητή και αποκωδικοποιητή JSON

- math Μαθηματικές συναρτήσεις

- re Λειτουργίες κανονικών εκφράσεων

- socket Διεπαφή δικτύωσης χαμηλού επιπέδου

- sys Παράμετροι και συναρτήσεις ειδικές για το σύστημα

- unittest και trace Πλαίσιο ελέγχου μονάδας και εκτέλεση παρακολούθησης Python

- xml.etree.ElementTree Δένδρο στοιχείων XML API

Σχετικά θέματα

Κλήση μακροεντολών Basic από Python

Βοήθεια του LibreOffice Basic

Βοήθεια δεσμών ενεργειών Python του LibreOffice