Collabora Office 24.04 Βοήθεια
Οι δέσμες ενεργειών Python του Collabora Office έρχονται σε τρεις διαφορετικές εκδόσεις, μπορούν να εξατομικευτούν, να μοιραστούν ή να ενσωματωθούν σε έγγραφα. Αποθηκεύονται σε διάφορες θέσεις που περιγράφονται στο Python Scripts Organization and Location. Για να εισάγετε αρθρώματα Python, οι τοποθεσίες τους πρέπει να είναι γνωστές από το Python κατά τον χρόνο εκτέλεσης.
Αυτός ο μηχανισμός απεικονίζεται για σύστημα αρχείου με βάση αρθρώματα και έγγραφο με βάση αρθρώματα. Ο χειρισμός εξαίρεσης παραλείπεται για σαφήνεια. Οι όροι βιβλιοθήκη ή κατάλογος, δέσμη ενεργειών ή αρθρώματα χρησιμοποιούνται εναλλακτικά. Μια μακροεντολή Python αναφέρεται σε συνάρτηση σε άρθρωμα.
Σημειώστε ότι ο τοπικός κατάλογος <User Profile>/Scripts/python/pythonpath εξερευνάται πάντα όταν εκτελείται μακροεντολή Python από το <User Profile>/Scripts/python.
Προσωπικές κοινόχρηστες δέσμες ενεργειών Python μπορούν να εισαχθούν μόλις οι κατάλογοί τους συμπεριληφθούν στη διαδρομή χρόνου εκτέλεσης Python. Δείτε τη σελίδα Λήψη πληροφοριών συνεδρίας για περισσότερες λεπτομέρειες αναφορικά με τις παραλειπόμενες κλάσεις συνεδρίας.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys
user_lib = Session().UserPythonScripts # Τοποθεσία δέσμης ενεργειών χρήστη
if not user_lib in sys.path:
sys.path.insert(0, user_lib) # Προσθήκη στη διαδρομή αναζήτησης
import screen_io as ui # το άρθρωμα 'screen_io.py' βρίσκεται στον κατάλογο user_lib
# Ο κώδικας σας ακολουθεί εδώ
Αυτό το παράδειγμα Python εκθέτει μια τοπική μεταβλητή XSCRIPTCONTEXT σε εισαγόμενο άρθρωμα:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, sys
share_lib = Session.SharedPythonScripts() # Κοινόχρηστη τοποθεσία δέσμης ενεργειών
if not share_lib in sys.path:
sys.path.insert(0, share_lib) # Προσθήκη στη διαδρομή αναζήτησης
from IDE_utils import ScriptContext # το 'IDE_utils.py' βρίσκεται με τις κοινόχρηστες δέσμες ενεργειών του Python.
XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
# Ο κώδικας σας ακολουθεί εδώ
Αντίθετα με τις προσωπικές και κοινόχρηστες δέσμες ενεργειών, η εγκατάσταση δεσμών ενεργειών του Collabora Office μπορεί να εισαχθεί οποτεδήποτε. Πέρα από τα αρθρώματα Python uno & unohelper του Collabora Office, άλλες δέσμες ενεργειών που εμφανίζονται στον κατάλογο <installation_path>/program μπορούν να εισαχθούν απευθείας, όπως το άρθρωμα msgbox.
Με κέλυφος Python:
>>> import msgbox, uno
>>> myBox = msgbox.MsgBox(uno.getComponentContext())
>>> myBox.addButton("okay")
>>> myBox.renderFromButtonSize()
>>> myBox.numberOflines = 2
>>> print(myBox.show("A small message",0,"Dialog title"))
Η εισαγωγή ενσωματωμένου αρθρώματος εγγράφου Python περιγράφεται παρακάτω. Ο χειρισμός σφαλμάτων δεν είναι λεπτομερής. Η διαδρομή χρόνου εκτέλεσης Python ενημερώνεται όταν το έγγραφο έχει ανοιχθεί και πριν το κλείσιμο. Δείτε το Συμβαντοοδηγούμενες μακροεντολές (Event-Driven Macros) για να μάθετε πώς να συνδέσετε τις μακροεντολές Python με τα συμβάντα του εγγράφου.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys, uno
def OnDocPostOpenLoadPython():
""" Προετοιμασία εισαγωγής αρθρωμάτων Python όταν φορτώνεται doc."""
PythonLibraries.loadLibrary('lib/subdir') # Προσθήκη καταλόγου στη διαδρομή αναζήτησης
PythonLibraries.loadLibrary('my_gui', 'screen_io') # Προσθήκη dir. & import screen_io
def OnDocQueryCloseUnloadPython():
""" Καθαρισμός PYTHON_PATH όταν κλείνει το doc. """
PythonLibraries.unloadLibrary('my_gui') # Καθαρισμός διαδρομής χρόνου εκτέλεσης Python
#Σημείωση: τα εισαγόμενα αρθρώματα παραμένουν φορτωμένα σε αυτό το παράδειγμα.
class PythonLibraries():
""" Εισαγωγέας φορτωτή βιβλιοθήκης Python και αρθρώματος
προσαρμοσμένο από το 'Bibliothèque de fonctions' του Hubert Lambert
στο https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
def isImportedModule(module_name: str) -> bool:
""" Έλεγχος καταλόγου αρθρώματος χρόνου εκτέλεσης """
return (module_name in sys.modules.keys())
def isLoadedLibrary(lib_name: str) -> bool:
""" Έλεγχος περιεχομένου PYTHON_PATH """
return (lib_name in sys.path)
def loadLibrary(lib_name: str, module_name=None):
""" προσθήκη καταλόγου στο PYTHON_PATH, εισαγωγή επώνυμου αρθρώματος """
doc = XSCRIPTCONTEXT.getDocument()
url = uno.fileUrlToSystemPath(
'{}/{}'.format(doc.URL,'Scripts/python/'+lib_name)
if not url in sys.path:
sys.path.insert(0, url)
if module_name and not module_name in sys.modules.keys():
return zipimport.zipimporter(url).load_module(module_name)
def unloadLibrary(lib_name: str):
""" αφαίρεση καταλόγου από PYTHON_PATH """
sys.path.remove(lib_name)
g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)