Makra Basic z Python wuwołać

Móžeće makra LibreOffice Basic ze skriptow Python wuwołać a dóstawaće potom slědowace kedźbyhódne funkcije:

Skriptowa wokolina nałoženskeje programowanskeje tykački (Application Programming Interface, API) wuwjedźenje skriptow mjez Python a Basic abo druhimi podpěranymi programowanskimi rěčemi podpěruje. Argumenty dadźa so mjez wuwołanjemi tam a sem přepodać, jeli su primitiwne datowe typy, kotrež wobě rěči znajetej, a pod wuměnjenjom, zo skriptowa wokolina je porjadnje přetworja.

tip

Poruča so, so ze standardnymi modulemi Python a funkcijemi API LibreOffice zeznajomić, prjedy hač rěčne wuwołanja wot Python do Basic, JavaScript abo druheje skriptoweje rěče přewjedźeće.


warning

Hdyž skripty Python z integrowaneje wuwiwanskeje wokoliny (Integrated Development Environment, IDE) wuwjedźeće, faluje snano do LibreOffice zasadźena mašina Basic. Wobeńdźće tohodla wuwołanja Python-do-LibreOffice Basic w tajkich kontekstach. Wokolina Python a Universal Networks Objects (UNO) wšak stej połnje k dispoziciji. Čitajće Integrowanu IDE za Python konfigurować za dalše informacije.


Skripty LibreOffice Basic wotwołać

Makra LibreOffice Basic móža wosobinske, zhromadne abo do dokumentow zasadźene być. Zo byšće je wuwjedł, dyrbi so wuwjedźenskočasowa wokolina z makrowymi městnami Basic k dispoziciji stajić. Implementowanje tykački com.sun.star.script.provider.XScriptProvider zmóžnja, wuwjedźomne skripty wotwoł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łanjom wotwoł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 wuwjesć

Dokumentacija LibreOffice Software Development Kit (SDK) za tykačku com.sun.star.script.provider.XScript wuwołansku konwenciju za wuwołanja mjez rěčemi wopisuje. Wuwołanje funkcijow sej tři pólne wariable wužaduje:

Syntaksa Python

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

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

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

Přikłady wosobinskich abo zhromadnych skriptow

Zapodaće/Wudaće na wobrazowce wuwołanja Python do Basic wopisuja. Dohladowanje dokumentowych podawkow wužiće rěče *args Python za ćišćenje wariabelneje ličby parametrow do dialoga protokolowanskeje konsole Access2Base.

tip

Za wuwiće móžeće wuwjedźenje skripta Python z pomocu rozšěrjenja Xray přetorhnyć, zo byšće kajkosće a metody UNO-objektow přepytować. Pytanje zmylkow rozšěrjenja APSO objektowu introspekciju pak z Xray pak z MRI-rozšěrjenjemi zmóžnja.



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

Přikłady za zasadźene skripty w dokumentach

Zjednorjena syntaksa *args Python da so w zwisku z rutinami LibreOffice Basic wužiwać, kotrež wariabelnu ličbu argumentow akceptuja. Pod funkcijemi Python Print a SUM jich pendanty Basic Print a SUM z horjeka naspomnjenej funkciju getBasicScript wuwołuje. Wobchadźenje z wuwzaćemi so njewopisuje.


	  # -*- coding: utf-8 -*-
	  from __future__ import unicode_literals
	      
	  def Print(*args):
	      """Wudawa podate znamješkowe rjećazki abo numeriske wurazy w dialogowym polu."""
	      xScript = getBasicScript("Print", "Scripting", embedded=True)
	      xScript.invoke((args), (), ())
	      
	  def SUM(*args):
	      """SUM podateho ličbneho 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ładźe dokumentow wariabelnu ličbu argumentow akceptujetej. Atributaj Private abo Public wuskutk nimatej. Přepruwowanje argumentoweho typa so přehladnosće dla přeskakuje.


	  Option Compatible ' "Standard.Scripting" module
	  Option Explicit
	      
	  Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
	      ''' Elementowu lisćinu wariabelneje ličby ćišćeć '''
	      ' wšě konwertibelne CStr()-argumenty so akceptuja
	      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 je wariabelna lisćina ličbow '''
	      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()
	  

Prošu podpěrajće nas!