Turinys

# Kreipiamasi į Basic kalbos makrokomandas iš Python kalbos

Galite kreiptis į LibreOffice Basic kalbos makrokomandas iš Python kalbos skriptų ir tada pastebimos galimybės gali būti įgautos, tokios kaip:

- Paprastos registravimo priemonės iš Access2Base bibliotekos sekimo pulto

- Įvedimo langelio ir Žinutės langelio ekrano I/O funkcijos pagal Basic kalbą lengvesniam Python kalbos kūrimui,

- Xray iškvietos pertraukia Python kalbos skripto vykdymą, kad pagelbėtų kintamųjų apžiūrą.

The LibreOffice Application Programming Interface (API) Scripting Framework supports inter-language script execution between Python and Basic, or other supported programming languages for that matter. Arguments can be passed back and forth across calls, provided that they represent primitive data types that both languages recognize, and assuming that the Scripting Framework converts them appropriately.

Yra rekomenduojama turėti supratimą Python kalbos standartiniams moduliams ir LibreOffice API funkcijoms, kad atlikti vidinės kalbos iškvietas iš Python į Basic, JavaScript kalbas arba bet kokią kitą skripto vykdyklę.

When running Python scripts from an Integrated Development Environment (IDE), the LibreOffice-embedded Basic engine may be absent. Avoid Python-to-LibreOffice Basic calls in such contexts. However Python environment and Universal Networks Objects (UNO) are fully available. Refer to Setting Up an Integrated IDE for Python for more information.

## Atgaunami LibreOffice Basic kalbos skriptai

LibreOffice Basic kalbos makrokomandos gali būti asmeninės, bendros arba įterptos į dokumentus. Norint juos vykdyti, Python kalbos laikas turi būti aprūpintas Basic kalbos makrokomandų vietomis. Realizuojant com.sun.star.script.provider.XScriptProvider sąsają, paleidžiama užklausa vykdomų skriptų:

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

    		 def getBasicScript(macro='Main', module='Module1', library='Standard',
    		         isEmbedded=False) -> XScript:
    		     „Paimkite Basic kalbos skripto objektą prieš iškvietą.“
    		     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

## Vykdomi LibreOffice Basic kalbos skriptai

„LibreOffice“ programinės įrangos dokumentacija, skirtacom.sun.star.script.provider.XScript sąsajos informacija vidinių kalbų susitarimams. Funkcijų aprašams reikia trijų masyvų:

- pirmieji kviečiamos programos argumentų sąrašai

- antrasis nurodo modifikuotus argumentus

- trečiasis skirtas grąžinamoms reikšmėms laikyti

### Pitono sintaksė

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

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

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

### Pavieniai pavyzdžiai arba pasidalinti skriptai

Pavyzdžių įvedimo/išvedimo ekranuose detalizavimas lyginat Pitono ir „Basic“ kreipinius. Monitoring Document Events iliustruoja *args Pitono argumentų idiomų naudojimą spausdinant parametrų kintamojo numerį į Access2Base į konsolės registracijos dialogo langą.

Kūrimo metu galite pertraukti Pitono skripo vykdymą naudodami „Xray“ plėtinį. Šitaip tikriname UNO objektų savybes ir metodus. APSO plėtinio derintuvė leidžia objektų introspekciją naudojant arba „Xray“, arba MRI plėtinius.

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

### Dokumentuose įterptųjų skriptų pavyzdžiai

*argsSuprastinta Pitono sintaksė gali būti naudojama kartu su „LibreOffice Basic“ programomis, kurios leidžia argumentų kintamojo numerį. Pitono funkcijos„Print“ ir SUM iškviečia „Basic “ „Print“ ir SUM funkcijų kopijas, tam naudojant minėtą getBasicScript funkciją. Išimčių apdorojimas nedetalizuojamas.

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

    	  def Print(*args):
    	      """Nurodytų eilučių arba skaitmeninių reiškinių rezultatai dialogo lange."""
    	      xScript = getBasicScript("Print", "Scripting", embedded=True)
    	      xScript.invoke((args), (), ())

    	  def SUM(*args):
    	      """Nurodyto numerio reiškinio suma (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,)

▸LibreOffice Basic“ „Print“ ir SUM dokumentuotos programos leidžia naudoti argumentų kintamojo numerį. „Private“ arba „Public“ atributai įtakos neturi. Aiškumo dėlei argumentų tipas netikrinamas.

    	  Option Compatible ' "Standard.Scripting" module
    	  Option Explicit

    	  Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
    	      ''' Kintamojo numerio spausdinamų vienetų sąrašas '''
    	      ' visi CStr() konvertuojami argumentai priimti
    	      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 – numerių kintamas sąrašas '''
    	      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()

Susijusios temos

Pitono skriptų iškvietimas iš „Basic“

Python programavimo pavyzdžiai

LibreOffice Python skriptai žinynas

„LibreOffice Basic“ žinynas