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

A Python macro is a function within a .py file, identified as a module. Unlike LibreOffice Basic and its dozen of UNO objects functions or services, Python macros use the XSCRIPTCONTEXT UNO single object, shared with JavaScript and BeanShell. The g_exportedScripts global tuple explicitly lists selectable macros from a module. Python modules hold autonomous code logic, and are independent from one another.

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

Genuine Basic UNO facilities can be inferred from XSCRIPTCONTEXT global variable. Refer to LibreOffice API for a complete description of XSCRIPTCONTEXT. XSCRIPTCONTEXT methods summarize as:

Μέθοδοι

Περιγραφή

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

getDocument()

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

ThisComponent

getDesktop()

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

StarDesktop

getComponentContext()

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

GetDefaultContext


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

tip

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


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

warning

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


LibreOffice Basic libraries contain classes, routines and variables, Python modules contain classes, functions and variables. Common pieces of reusable Python or UNO features must be stored in My macros within (User Profile)/Scripts/python/pythonpath. Python libraries help organize modules in order to prevent module name collisions. Import uno.py inside shared modules.

Genuine BASIC UNO facilities can be inferred using uno.py module. Use Python interactive shell to get a complete module description using dir() and help() Python commands.

Συναρτήσεις

Περιγραφή

Απεικονιζόμενο στη 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()

See Opening a Dialog

CreateUnoDialog()

See Creating a Listener

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


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

Similarly to LibreOffice Basic that supports browsing and dynamic loading of libraries, Python libraries can be explored and imported on demand. For more information on library containers, visit LibreOffice Application Programming Interface (API) or download LibreOffice Software Development Kit (SDK).

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


            import uno, sys
            
            def load_library(library_name: str, module_name=None):
                """ load library and import module
                
                Διασκευασμένο από τη '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 takes precedence
                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