Python do Basic

Wobsah

# Makra Basic z Python wuwołać

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

- Jednore protokolowanske móžnosće z konsole Trace biblioteki Access2Base,

- Funkciji wobrazowki za zapodaće a wudaće (Z/W) InputBox a MsgBox, kotrejž na Basic bazujetej, zo byšće wuwiće Python wosnadnił,

- Xray přetorhnjenje wuwjedźenja skripta Python wuwołuje, zo by přepytowanje wariablow wosnadnił.

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.

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

Hdyž skripty Python z integrowaneje wuwiwanskeje wokoliny (Integrated Development Environment, IDE) wuwjedźeće, faluje snano do LibreOfficeDev zasadźena mašina Basic. Wobeńdźće tohodla wuwołanja Python-do-LibreOfficeDev 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 LibreOfficeDev Basic wotwołać

Makra LibreOfficeDev 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 LibreOfficeDev Basic wuwjesć

Dokumentacija LibreOfficeDev 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:

- prěnja argumenty wuwołaneje rutiny nalistuje

- druha změnjene argumenty identifikuje

- třeća wróćenske hódnoty skł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.

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 LibreOfficeDev 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 LibreOfficeDev 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()

Podobne temy

Skripty Python z Basic wuwołać

programowanske přikłady Python

LibreOfficeDev Pomoc wo skriptach Python

LibreOfficeDev Basic Help

Prošu podpěrajće nas!