Περιεχόμενα

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

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

- Ευκολίες απλής σύνδεσης από την κονσόλα παρακολούθησης βιβλιοθήκης Access2Base,

- Συναρτήσεις εισόδου/εξόδου οθόνης InputBox και MsgBox με βάση την Basic για διευκόλυνση ανάπτυξης της Python,

- Η Xray καλεί διακοπή εκτέλεσης δέσμης ενεργειών Python για να βοηθήσει την επιθεώρηση μεταβλητών.

Το Πλαίσιο δέσμης ενεργειών του LibreOffice Διασύνδεση προγραμματισμού εφαρμογών (API) υποστηρίζει τη διαγλωσσική εκτέλεση σεναρίων μεταξύ Python και Basic ή άλλες υποστηριζόμενες γλώσσες προγραμματισμού για αυτό το θέμα. Τα ορίσματα μπορούν να διαβιβαστούν πέρα δώθε σε κλήσεις, υπό την προϋπόθεση ότι αντιπροσωπεύουν πρωτογενείς τύπους δεδομένων που αναγνωρίζουν και οι δύο γλώσσες και υποθέτοντας ότι το Πλαίσιο Σεναρίων τα μετατρέπει κατάλληλα.

Συνιστάται η γνώση των τυπικών αρθρωμάτων Python και των χαρακτηριστικών API του LibreOffice πριν την εκτέλεση διαγλωσσικών κλήσεων από Python σε Basic, JavaScript ή οποιονδήποτε άλλο μηχανισμό δεσμών ενεργειών.

Όταν εκτελούνται σενάρια Python από ένα ολοκληρωμένο περιβάλλον ανάπτυξης (IDE), η ενσωματωμένη βασική μηχανή του LibreOffice μπορεί να απουσιάζει. Αποφύγετε τις κλήσεις Python προς Basic του LibreOffice σε τέτοια περιβάλλοντα. Ωστόσο, το περιβάλλον Python και τα Universal Networks Objects (UNO) είναι πλήρως διαθέσιμα. Ανατρέξτε στο Ρύθμιση ενός ολοκληρωμένου IDE για Python για περισσότερες πληροφορίες.

## Ανάκτηση των δεσμών ενεργειών Basic του LibreOffice

Οι μακροεντολές Basic του LibreOffice μπορεί να είναι προσωπικές, κοινόχρηστες, ή ενσωματωμένες σε έγγραφα. Για να τις εκτελέσετε, ο χρόνος εκτέλεσης Python χρειάζεται να παρέχεται με τοποθεσίες μακροεντολών Basic. Η υλοποίηση της διεπαφής com.sun.star.script.provider.XScriptProvider επιτρέπει την ανάκτηση των εκτελέσιμων δεσμών ενεργειών:

    		 import uno
    		 from com.sun.star.script.provider import Xscript

    		 def getBasicScript(macro='Main', module='Module1', library='Standard',
    		         isEmbedded=False) -> XScript:
    		     '''Πάρτε το αντικείμενο δέσμης ενεργειών Basic πριν την κλήση.'''
    		     ctx = uno.getComponentContext()
    		     smgr = ctx.ServiceManager
    		     if isEmbedded:
    		         desktop = smgr.createInstanceWithContext('com.sun.star.frame.Desktop', ctx)
    		         scriptPro = desktop.CurrentComponent.getScriptProvider()
    		         location = "document"
    		     else:
    		         mspf = smgr.createInstanceWithContext(
    		             "com.sun.star.script.provider.MasterScriptProviderFactory", ctx)
    		         scriptPro = mspf.createScriptProvider("")
    		         location = "application"
    		     scriptName = "vnd.sun.star.script:"+library+"."+module+"."+macro+ \
    		                  "?language=Basic&location="+location
    		     xScript = scriptPro.getScript(scriptName)
    		     return xScript

## Εκτέλεση δεσμών ενεργειών Basic του LibreOffice

Η τεκμηρίωση της εργαλειοθήκης ανάπτυξης λογισμικού (SDK) του LibreOffice για τη διεπαφή com.sun.star.script.provider.XScript δίνει λεπτομέρειες της σύμβασης κλήσης για διαγλωσσικές κλήσεις. Η κλήση των συναρτήσεων απαιτεί τρεις πίνακες:

- η πρώτη παραθέτει τα ορίσματα της καλούμενης ρουτίνας

- η δεύτερη ταυτοποιεί τα τροποποιημένα ορίσματα

- η τρίτη αποθηκεύει τις επιστρεφόμενες τιμές

### Σύνταξη Python

results = script.invoke((prompt,buttons,title), (), ())

script.invoke((message,), tuple, ())

script.invoke((args), (), results)

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

Παραδείγματα στο Είσοδος/Έξοδος σε οθόνη περιγράφουν κλήσεις χρήσης Python σε Basic. Η παρακολούθηση συμβάντων εγγράφου δείχνει τη χρήση των *args του ιδιώματος Python για να εκτυπώσει μεταβλητό αριθμό παραμέτρων στον διάλογο κονσόλας σύνδεσης Access2Base.

Κατά την ανάπτυξη μπορείτε να διακόψετε την εκτέλεση της δέσμης ενεργειών Python χρησιμοποιώντας την επέκταση Xray για να ελέγξετε ιδιότητες και μεθόδους των αντικειμένων UNO. Η αποσφαλμάτωση της επέκτασης APSO επιτρέπει την ενδοσκόπηση χρησιμοποιώντας είτε Xray, είτε επεκτάσεις MRI.

    	  def xray(myObject):
    	  	  script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
    	  	  script.invoke((myObject,), (), ())

### Παραδείγματα ενσωματωμένων δεσμών ενεργειών σε έγγραφα

*argsΗ απλοποιημένη σύνταξη Python μπορεί να χρησιμοποιηθεί σε συνδυασμό με τις ρουτίνες Basic του LibreOffice που δέχονται μεταβλητό αριθμό ορισμάτων. Κάτω από τις συναρτήσεις Python Print και SUM καλούνται οι αντίστοιχες τους Basic Print και SUM, χρησιμοποιώντας την προαναφερερόμενη συνάρτηση getBasicScript. Ο χειρισμός εξαιρέσεων δεν παρατίθεται.

    	  # -*- coding: utf-8 -*-
    	  from __future__ import unicode_literals

    	  def Print(*args):
    	      """Εμφανίζει τις καθορισμένες συμβολοσειρές ή αριθμητικές εκφράσεις σε πλαίσιο διαλόγου."""
    	      xScript = getBasicScript("Print", "Scripting", embedded=True)
    	      xScript.invoke((args), (), ())

    	  def SUM(*args):
    	      """SUM την καθορισμένη έκφραση αριθμού."""
    	      xScript = getBasicScript("SUM", "Scripting", embedded=True)
    	      res = xScript.invoke((args), (), ())
    	      return res[0]

    	  # def getBasicScript()  # see above

    	  def playWithArgs():
    	      Print("Fun with *args ", -9.81, 297864.681974, 8762E-137)
    	      Print(SUM(45, -9.81, 297864.681974))
    	      Print(SUM(45, -9.81, 297864.681974, 8762E+137))

    	  g_exportedScripts = (playWithArgs,)

Οι ρουτίνες με βάση το έγγραφο της Basic του LibreOffice Print και SUM δέχονται μεταβλητό αριθμό ορισμάτων. Τα γνωρίσματα Private ή Public δεν έχουν κανένα αποτέλεσμα. Ο έλεγχος τύπου ορισμάτων παραλείπεται για σαφήνεια.

    	  Option Compatible ' "Standard.Scripting" module
    	  Option Explicit

    	  Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
    	      ''' Εκτύπωση καταλόγου στοιχείων μεταβλητού αριθμού '''
    	      ' όλα τα μετατρέψιμα ορίσματα CStr() γίνονται δεκτά
    	      Dim str As String, i As Integer
    	      If UBound(args) >= 0 Then
    	          For i = 0 To UBound(args)
    	              str = str + Cstr(args(i))+ sep
    	          Next i
    	      End If
    	      Print str
    	  End Sub ' Standard.Scripting.Print()

    	  Public Function SUM(ParamArray args() As Variant) As Variant
    	      ''' SUM είναι κατάλογος μεταβλητών αριθμών '''
    	      Dim ndx As Integer
    	      If UBound(args) >= 0 Then
    	          For ndx = 0 To UBound(args)
    	              SUM = SUM + args(ndx)
    	          Next ndx
    	      End If
    	  End Function ' Standard.Scripting.SUM()

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

Κλήση Python Scripts από Basic

παραδείγματα προγραμματισμού Python

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

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