Python do Basic

Wopśimjeśe

# Makra Basic z Python wuwołaś

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

- Jadnore protokolěrowańske móžnosći z konsole Trace biblioteki Access2Base,

- Funkciji wobrazowki za zapódaśe a wudaśe (Z/W) InputBox a MsgBox, kótarejž na Basic bazěrujotej, aby wuwiśe Python wólažcył,

- Xray pśetergnjenje wuwjeźenja skripta Python wuwołujo, aby pśeglědowanje wariablow wólažcył.

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.

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

Gaž skripty Python z integrěrowaneje wuwijańskeje wokoliny (Integrated Development Environment, IDE) wuwjeźośo, felujo snaź do LibreOfficeDev zasajźona mašina Basic. Wobińśo se togodla wuwołanja Python-do-LibreOfficeDev 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 LibreOfficeDev Basic wótwołaś

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

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

- prědna argumenty wuwołaneje rutiny nalicyjo

- druga změnjone argumenty identificěrujo

- tśeśa gódnoty slědkdaśa składujo

### 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.

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 LibreOfficeDev 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 LibreOfficeDev 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ódobne temy

Skripty Python z Basic wuwołaś

programěrowańske pśikłady Python

LibreOfficeDev Pomoc wó skriptach Python

LibreOfficeDev Basic Help

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