Η βιβλιοθήκη ScriptForge είναι διαθέσιμη τόσο για Basic όσο και για Python. Οι περισσότερες υπηρεσίες, μέθοδοι και ιδιότητες λειτουργούν με τον ίδιο τρόπο και στις δύο γλώσσες προγραμματισμού. Ωστόσο, λόγω διαφορών στον τρόπο λειτουργίας κάθε γλώσσας, οι χρήστες του ScriptForge πρέπει να γνωρίζουν ορισμένα χαρακτηριστικά της βιβλιοθήκης όταν χρησιμοποιούν τη Python:
Μέθοδοι και ονόματα ιδιοτήτων: Στην Python, όλες οι μέθοδοι και οι ιδιότητες μπορούν να χρησιμοποιηθούν σε μορφές πεζών, με πρώτο γράμμα κάθε λέξης κεφαλαίο (ProperCased) ή καμηλογράμματα (camelCased).
Arguments: All keyword arguments passed on to methods are lowercased.
Dates: (Ημερομηνίες:) Όλα τα αντικείμενα ημερομηνίας μεταβιβάζονται και επιστρέφονται ως datetime.datetime εγγενή αντικείμενα Python.
Arrays: (Πίνακες:) Οι μονοδιάστατοι πίνακες μεταβιβάζονται και επιστρέφονται ως πλειάδες (που είναι ένα αμετάβλητο αντικείμενο). Οι δισδιάστατοι πίνακες διαβιβάζονται και επιστρέφονται ως πλειάδες πλειάδων.
None: Η λέξη-κλειδί None της Python είναι ισοδύναμη με τις λέξεις Null, Empty (Κενό) ή Nothing (Τίποτα) της Basic.
UNO objects: (Αντικείμενα UNO:) Όλες οι δομές UNO ανταλλάσσονται μεταξύ Basic και Python χωρίς καμία αλλαγή.
Debugging: (Αποσφαλμάτωση) Κάθε φορά που παρουσιάζεται σφάλμα σε σενάρια Python που χρησιμοποιούν ScriptForge, το μήνυμα σφάλματος που παρέχεται από τη στοίβα εκτέλεσης Python εμφανίζει τη γραμμή κώδικα που ενεργοποίησε το σφάλμα. Στα μηνύματα σφάλματος Basic δεν εμφανίζονται αυτές οι πληροφορίες.
Οι υποδείξεις πληκτρολόγησης Python - που σχετίζονται με τις δημόσιες μεθόδους και ιδιότητες των υπηρεσιών ScriptForge - μπορούν να ληφθούν από IDE που υποστηρίζουν τέτοια δυνατότητα. Οπτικά, κατά την επεξεργασία ενός σεναρίου χρήστη:
η τοποθέτηση του δείκτη του ποντικιού σε μια παρουσία αντικειμένου, μια μέθοδο ή μια ιδιότητα εμφανίζει την λεπτομερή περιγραφή της.
ένα "." αφού μια παρουσία αντικειμένου εμφανίσει ένα αναπτυσσόμενο πλαίσιο που παραθέτει όλες τις διαθέσιμες διεπαφές.
οι αγκύλες μετά από ένα όνομα μεθόδου ξεκινούν την ολοκλήρωση κώδικα εμφανίζοντας τα ορίσματά της.
Οι υποδείξεις πληκτρολόγησης εμφανίζονται κατά την επεξεργασία μεθόδων και ιδιοτήτων με κεφαλαία/πεζά γράμματα.
Εκτέλεση σεναρίων Python στο LibreOfficeDev
Depending on what you intend to achieve, you may choose one of the following approaches to running Python scripts in LibreOfficeDev:
Run Scripts inside the current LibreOfficeDev process: Python scripts are executed from within the LibreOfficeDev process by using the Tools - Macros - Run Macro menu or the APSO extension to call user scripts stored in the Python scripts folder. You can also use the APSO Python shell to interactively run Python scripts.
Run Scripts separately from the LibreOfficeDev process: Python scripts are executed from an external process that connects to an ongoing LibreOfficeDev process using a pipe or a socket.
If you plan to run scripts from inside the LibreOfficeDev process, it is recommended to install the APSO (Alternative Script Organizer for Python) extension. However, to develop Python scripts from outside LibreOfficeDev, you can choose your preferred Python IDE.
Running Scripts from inside the LibreOfficeDev process
Using the APSO extension
The easiest way to get started with Python scripting in LibreOfficeDev is by installing the APSO extension. After installing it, open any LibreOfficeDev component and go to Tools - Macros - Organize Python Scripts.
In APSO's main window go to Menu - Python Shell.
Alternatively you can open APSO using the default shortcut Alt + Shift + F11.
Now you can start typing Python commands and the shell will print the corresponding output after each line of code is executed.
To start using the ScriptForge library, you need to import the CreateScriptService method, with which you will be able to access the services provided by the library. The example below uses the Basic service to display a message box.
from scriptforge import CreateScriptService
bas = CreateScriptService("Basic")
bas.MsgBox("Hello!")
To run the example above, enter each line in the Python shell, one by one, pressing the Enter key after you type each line of code.
Now you can start executing Python commands using any of the ScriptForge services. For example, the code snippet below uses the UI service to create a blank Writer document.
Now you can create a text file inside your Python user scripts folder, for instance my_script.py, and start typing your scripts.
Next is a simple example that gets the numeric value from a Calc cell and increments it by 1. Simply type the following code into my_script.py file.
from scriptforge import CreateScriptService
doc = CreateScriptService("Calc")
def increment_cell(args=None):
value = doc.GetValue("A1")
value += 1
doc.SetValue("A1", value)
g_exportedScripts = (increment_cell, )
This example creates the increment_cell function. Note that g_exportedScripts is a tuple that tells which functions will be displayed in LibreOfficeDev as user scripts.
To run this script from within a Calc document:
Create or open a Calc file.
Enter some numeric value into cell "A1" in the current sheet.
Go to Tools - Macros - Run Macros .
Choose My Macros - my_script in the library selector. Then choose the increment_cell function under the Macro Name list.
Click Run. Note that the value in cell "A1" was incremented by 1.
You can also use APSO to run Python scripts in a similar manner:
First open APSO by going to Tools - Macros - Organize Python Scripts.
In the macro list, navigate to My Macros - my_script - increment_cell.
Click Execute.
Running Scripts separately from the LibreOfficeDev process
Determining the Installation Path
The first step to run scripts from a separate process is to find the folder where LibreOfficeDev is installed. There are several ways to do that, but ScriptForge provides a quick way to identify your installation path. For that, open APSO's Python shell and type:
The output from the code above is the base directory where LibreOfficeDev is installed. Now you need to add the "program" subfolder to the resulting path. This is the base folder from which you will run Python scripts from a separate process.
For example, suppose you get /usr/lib/libreoffice/ as the result from running the Python code above. Then you need to consider /usr/lib/libreoffice/program as the path to run your Python scripts.
Start LibreOfficeDev with pipe or socket settings
To run Python scripts from a separate process, you need to start LibreOfficeDev with a few additional options that specify pipe name or the hostname and port through which the external process will communicate with the LibreOfficeDev component process.
Open the your operating system's command prompt, navigate to the program folder of your LibreOfficeDev installation directory and type either:
flatpak run org.libreOffice.LibreOffice accept='socket,host=localhost,port=2021;urp;'
Either command above will start LibreOfficeDev with a communication channel open so that other processes can exchange messages with it.
Note that the previous example opens LibreOfficeDev start center. If you want to open a specific component, for instance Writer, you can add the --writer flag to the command, as follows.
Take note of the name, or host and port parameters, which in this example are aPipeName, or localhost and 2021, respectively.
Running an External Python Shell
Start the Python shell from within the program folder inside your LibreOfficeDev installation path. Follow the steps above to learn how to find your installation path.
On Linux / Mac OS:
$ cd /usr/lib/libreoffice/program
$ python
On Windows:
$ cd C:\\Program Files\\LibreOffice\\program\
$ python.exe
This will open the Python shell and now you can start typing commands that will be executed by LibreOfficeDev. But first you need to set up the pipe or the socket connection. The ScriptForge() statement below must precede the very first call to CreateScriptService().
Run either:
from scriptforge import ScriptForge, CreateScriptService
ScriptForge(pipe='aPipeName')
from scriptforge import ScriptForge, CreateScriptService
ScriptForge(hostname='localhost', port=2021)
Read the section Setting PYTHONPATH below in case of errors importing scriptforge.py or uno.py.
The second line of code above defines the pipe or host and port settings so that the Python shell can communicate with an ongoing LibreOfficeDev process opened with the same pipe or socket settings.
Now you can run other Python commands and they will be able to communicate with the LibreOfficeDev process. For example:
ui = CreateScriptService("UI")
bas = CreateScriptService("Basic")
doc = ui.OpenDocument("~/Documents/myFile.ods")
bas.MsgBox(doc.DocumentType)
Setting PYTHONPATH
Depending on your operating system's configuration you will need to set the environment variable PYTHONPATH in order to import the scriptforge.py library, which in turn requires importing the uno.py library.
Use your operating system's file search tool to determine the directory where both these files are located.
For instance, on a default Ubuntu installation both files may be located at:
scriptforge.py: Located in /usr/lib/libreoffice/program
uno.py: Located in /usr/lib/python3/dist-packages
In this case, set the environment variable PYTHONPATH as follows before starting the Python interpreter: