Makra Basic z Python wuwołaś

Móžośo makra LibreOffice Basic ze skriptow Python wuwołaś a dostawaśo pón slědujuce późiwabne funkcije:

Skriptowa wokolina nałožeńskego programěrowańskego zwězowańskego městna (Application Programming Interface, API) wuwjeźenje skriptow mjazy Python a Basic abo drugimi pódprětymi programěrowańskimi rěcami pódpěra. Argumenty daju se mjazy wuwołanjami tam a sem pśepódaś, jolic su primitiwne datowe typy, kótarež wobej rěcy znajotej, a pód wuměnjenim, až skriptowa wokolina je pórědnje pśetwórjujo.

tip

Pśiraźijo se, se ze standardnymi modulami Python a funkcijami API LibreOffice wopóznaś, nježli ažrěcne wuwołanja wót Python do Basic, JavaScript abo drugeje skriptoweje rěcy pśewjeźośo.


warning

Gaž skripty Python z integrěrowaneje wuwijańskeje wokoliny (Integrated Development Environment, IDE) wuwjeźośo, felujo snaź do LibreOffice zasajźona mašina Basic. Wobińśo se togodla wuwołanja Python-do-LibreOffice Basic w takich kontekstach. Wokolina Python a Universal Networks Objects (UNO) pak stej połnje k dispoziciji. Cytajśo Integrěrowanu IDE za Python konfigurěrowaś za dalšne informacije.


Skripty LibreOffice Basic wótwołaś

Makra LibreOffice Basic mógu wósobinske, zgromadne abo do dokumentow zasajźone byś. Aby je wuwjadł, musy se wokolina casa wužywanja z makrowymi městnami Basic k dispoziciji stajiś. Implementěrowanje zwězowańskego městna com.sun.star.script.provider.XScriptProvider zmóžnja, wuwjeźobne skripty wótwołaś:


		 import uno
		 from com.sun.star.script.provider import Xscript
		     
		 def getBasicScript(macro='Main', module='Module1', library='Standard',
		         isEmbedded=False) -> XScript:
		     '''Skriptowy objekt Basic pśed wuwołanim wótwołaś.'''
		     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
		 

Skripty LibreOffice Basic wuwjasć

Dokumentacija LibreOffice Software Development Kit (SDK) za zwězowańske městno com.sun.star.script.provider.XScript wuwołańsku konwenciju za wuwołanja mjazy rěcami wopisujo. Wuwołanje funkcijow se tśi pólne wariable pomina:

Syntaksa Python

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

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

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

Pśikłady wósobinskich abo zgromadnych skriptow

Zapódaśe/Wudaśe na wobrazowce wuwołanja Python do Basic wopisuju. Doglědowanje dokumentowych tšojenjow wužyśe rěcy *args Python za śišćanje wariabelneje licby parametrow do dialoga protokolěrowańskeje konsole Access2Base.

tip

Za wuwiśe móžośo wuwjeźenje skripta Python z pomocu rozšyrjenja Xray pśetergnuś, aby kakosći a metody UNO-objektow pśeglědowaś. Pytanje zmólkow rozšyrjenja APSO objektowu introspekciju pak z Xray pak z MRI-rozšyrjenjami zmóžnja.



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

Pśikłady za zasajźone skripty w dokumentach

Zjadnorjona syntaksa *args Python dajo se w zwisku z rutinami LibreOffice Basic wužywaś, kótarež wariabelnu licbu argumentow akceptěruju. Pód funkcijami Python Print a SUM jich pendanty Basic Print a SUM z górjejce naspomnjoneju funkciju getBasicScript wuwołujo. Wobchad z wuwześami se njewopisujo.


	  # -*- coding: utf-8 -*-
	  from __future__ import unicode_literals
	      
	  def Print(*args):
	      """Wudawa pódane znamuškowe rjeśazki abo numeriske wuraze w dialogowym pólu."""
	      xScript = getBasicScript("Print", "Scripting", embedded=True)
	      xScript.invoke((args), (), ())
	      
	  def SUM(*args):
	      """SUM pódanego licbowego wuraza."""
	      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,)
	  

Rutinje LibreOffice Basic Print a SUM na zakłaźe dokumentow wariabelnu licbu argumentow akceptěrujotej. Atributa Private abo Public njamatej wustatkowanje. Pśeglědowanje argumentowego typa se pśeglědnosći dla pśeskokujo.


	  Option Compatible ' "Standard.Scripting" module
	  Option Explicit
	      
	  Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
	      ''' Elementowu lisćinu wariabelneje licby śišćaś '''
	      ' wšykne konwertibelne CStr()-argumenty se akceptěruju
	      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 jo wariabelna lisćina licbow '''
	      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()
	  

Pšosym pódprějśo nas!