Python σε Basic

Περιεχόμενα
Δείκτης 🔎︎

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

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

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

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

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

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

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

Κατά την εκτέλεση δεσμών ενεργειών Python από ολοκληρωμένο περιβάλλον ανάπτυξης (IDE), η ενσωματωμένη μηχανή Basic του 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.

At time of development you can interrupt Python script execution using Xray extension in order to inspect properties and methods of UNO objects. The ASPO extension debugger allows object introspection using either Xray either MRI extensions.

    	  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 Help