Προγραμματισμός με σενάρια Python

Μακροεντολές Python είναι συναρτήσεις μέσα σε αρχεία .py, που ταυτοποιούνται ως αρθρώματα. Αντίθετα με το LibreOffice Basic και τις δεκάδες συναρτήσεις ή υπηρεσίες αντικειμένων UNO, οι μακροεντολές Python χρησιμοποιούν το μοναδικό αντικείμενο UNO XSCRIPTCONTEXT, που μοιράζεται με JavaScript και Beanshell. Η g_exportedScripts καθολική πλειάδα παραθέτει ρητά επιλέξιμες μακροεντολές ενός αρθρώματος. Τα αρθρώματα Python κρατούν αυτόνομο κώδικα λογικής και είναι ανεξάρτητα μεταξύ τους.

Καθολική μεταβλητή XSCRIPTCONTEXT

Ο αυθεντικός εξοπλισμός Basic UNO μπορεί να εξαχθεί από την καθολική μεταβλητή XSCRIPTCONTEXT. Δείτε το LibreOffice API για πλήρη περιγραφή του XSCRIPTCONTEXT. Οι μέθοδοι XSCRIPTCONTEXT συνοψίζονται ως:

Μέθοδοι

Περιγραφή

Απεικονιζόμενο στη Basic ως

getDocument()

Η αναφορά εγγράφου στο οποίο το σενάριο μπορεί να λειτουργήσει.

ThisComponent

getDesktop()

Η αναφορά επιφάνειας εργασίας στην οποία μπορεί να λειτουργήσει το σενάριο.

StarDesktop

getComponentContext()

Το περιεχόμενο στοιχείου του οποίου το σενάριο μπορεί να χρησιμοποιηθεί για τη δημιουργία άλλων.

GetDefaultContext


Η εγκατάσταση των κοινόχρηστων σεναρίων HelloWorld και Capitalise δείχνουν τις σχετικές με το UNO μακροεντολές που χρησιμοποιούν την καθολική μεταβλητή XSCRIPTCONTEXT.

tip

Το αρχείο εξόδου προτύπου Python δεν είναι διαθέσιμο όταν εκτελούνται μακροεντολές Python από το μενού Εργαλεία - Μακροεντολές - Εκτέλεση μακροεντολών. Δείτε το Είσοδος/Έξοδος στην οθόνη για περισσότερες πληροφορίες.


Εισαγωγή αρθρώματος

warning

Το XSCRIPTCONTEXT δεν παρέχεται σε εισαγόμενα αρθρώματα.


Οι βιβλιοθήκες Basic του LibreOffice περιέχουν κλάσεις, ρουτίνες και μεταβλητές, τα αρθρώματα Python περιέχουν κλάσεις, συναρτήσεις και μεταβλητές. Συνηθισμένα τμήματα επαναχρησιμοποιήσιμων ιδιοτήτων Python ή UNO πρέπει να αποθηκεύονται στο Οι μακροεντολές μου (My macros) στο (User Profile)/Scripts/python/pythonpath. Οι βιβλιοθήκες Python βοηθούν την οργάνωση αρθρωμάτων με σειρά για να αποτρέψουν συγκρούσεις ονομάτων αρθρωμάτων. Εισάγετε τα uno.py στα κοινόχρηστα αρθρώματα.

Ο αυθεντικός εξοπλισμός BASIC UNO μπορεί να συναχθεί χρησιμοποιώντας το άρθρωμα uno.py. Χρησιμοποιήστε το διαδραστικό κέλυφος Python για να πάρετε μια πλήρη περιγραφή αρθρώματος χρησιμοποιώντας τις εντολές Python dir() και help().

Συναρτήσεις

Περιγραφή

Απεικονιζόμενο στη Basic ως

absolutize()

Επιστρέφει απόλυτα url αρχείου από τα δεδομένα urls.

createUnoStruct()

Δημιουργεί δομή UNO ή εξαίρεση που δίνεται από το typeName.

CreateUNOStruct()

fileUrlToSystemPath()

Επιστρέφει διαδρομή του συστήματος.

ConvertFromURL()

getClass()

Επιστρέφει την κλάση συμπαγούς εξαίρεσης UNO, δομής ή διεπαφής.

getComponentContext()

Επιστρέφει το περιεχόμενο του στοιχείου που χρησιμοποιείται για την αρχικοποίηση του χρόνου έναρξης Python.

GetDefaultContext()

Enum()

getConstantByName()

Αναζητά την τιμή σταθεράς IDL δίνοντας το ρητό της όνομα.

Δείτε ομάδες σταθερών API

isInterface()

Επιστρέφει True, όταν το obj είναι κλάση διεπαφής UNO.

systemPathToFileUrl()

Επιστρέφει URL αρχείου για τη δεδομένη διαδρομή συστήματος.

ConvertToURL()


Τα κοινόχρηστα σενάρια εγκατάστασης LibreLogo και TableSample χρησιμοποιούν το άρθρωμα uno.py.

Περισσότερα δείγματα Python-Basic

Python UNO

Βασικά χαρακτηριστικά UNO

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

obj = smgr.createInstanceWithContext( .. , ctx)

CreateUnoService()

Δείτε Άνοιγμα διαλόγου

CreateUnoDialog()

Δείτε Δημιουργία ακροατή

CreateUnoListener()

Δείτε τύποι δεδομένων UNO

CreateUnoValue()

CreateObject()

EqualUnoObjects()

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

GetProcessServiceManager()

def hasUnoInterfaces(obj, *interfaces):

return set(interfaces).issubset(t.typeName for t in obj.Types)

HasUnoInterfaces()

IsUnoStruct()

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

DESK = 'com.sun.star.frame.Desktop'

desktop = smgr.createInstanceWithContext(DESK , ctx)

StarDesktop

desktop = smgr.createInstanceWithContext(DESK , ctx)

doc = desktop.CurrentComponent

ThisComponent


Εισαγωγή ενσωματωμένου αρθρώματος

Παρόμοια με το LibreOffice Basic που υποστηρίζει πλοήγηση και δυναμική φόρτωση βιβλιοθηκών, οι βιβλιοθήκες Python μπορούν να εξερευνηθούν και να εισαχθούν κατ' απαίτηση. Για περισσότερες πληροφορίες για περιέκτες βιβλιοθήκης, επισκεφτείτε LibreOffice Application Programming Interface (API) ή κατεβάστε το LibreOffice Software Development Kit (SDK).

Η εισαγωγή ενσωματωμένου αρθρώματος εγγράφου Python δείχνεται παρακάτω, ο χειρισμός εξαίρεσης δεν δίνεται με λεπτομέρειες:


            import uno, sys
            
            def load_library(library_name: str, module_name=None):
                '''''' φόρτωση βιβλιοθήκης και εισαγωγή αρθρώματος
                
                Διασκευασμένο από τη 'Bibliothèque de fonctions' του Hubert Lambert
                στο https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # τρέχον έγγραφο
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                if not url in sys.path:  # προσθέστε τη διαδρομή εάν χρειάζεται
                    sys.path.insert(0, url)  # το doclib προηγείται
                if module_name:  # εισαγωγή εάν ζητηθεί
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # προσθήκη διαδρομής <lib> + εισαγωγή <module>
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros