Pagtawag sa Basic Macros mula sa Python

Maaari mong tawagan ang LibreOffice Basic macros mula sa mga script ng Python, at maaaring makuha ang mga kapansin-pansing feature bilang kapalit tulad ng:

Ang LibreOffice Application Programming Interface (API) Scripting Framework ay sumusuporta sa inter-language script execution sa pagitan ng Python at Basic, o iba pang sinusuportahang programming language para sa bagay na iyon. Ang mga argumento ay maaaring ipasa nang pabalik-balik sa mga tawag, sa kondisyon na kinakatawan ng mga ito ang mga primitive na uri ng data na kinikilala ng parehong wika, at ipagpalagay na ang Scripting Framework ay na-convert ang mga ito nang naaangkop.

tip

Inirerekomenda na magkaroon ng kaalaman sa mga standard na module ng Python at mga feature ng LibreOffice API bago magsagawa ng mga inter-language na tawag mula sa Python hanggang Basic, JavaScript o anumang iba pang script engine.


warning

Kapag nagpapatakbo ng mga script ng Python mula sa isang Integrated Development Environment (IDE), maaaring wala ang LibreOffice-embedded Basic engine. Iwasan ang Python-to-LibreOffice Basic na mga tawag sa mga ganitong konteksto. Gayunpaman, ang kapaligiran ng Python at Universal Networks Objects (UNO) ay ganap na magagamit. Sumangguni sa Pag-set Up ng Integrated IDE para sa Python para sa karagdagang impormasyon.


Kinukuha ang LibreOffice Basic Scripts

Maaaring personal, ibinahagi, o i-embed sa mga dokumento ang LibreOffice Basic macros. Upang maisakatuparan ang mga ito, ang oras ng pagtakbo ng Python ay kailangang ibigay sa mga Pangunahing macro na lokasyon. Pagpapatupad ng com.sun.star.script.provider.XScriptProvider interface ay nagbibigay-daan sa pagkuha ng mga executable script:


		 import uno
		 from com.sun.star.script.provider import Xscript
		     
		 def getBasicScript(macro='Main', module='Module1', library='Standard',
		         isEmbedded=False) -> XScript:
		     '''Grab Basic script object bago ang invocation.'''
		     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
		 

Isinasagawa ang LibreOffice Basic Scripts

Ang dokumentasyon ng LibreOffice Software Development Kit (SDK) para sa com.sun.star.script.provider.XScript ang interface ay nagdedetalye ng calling convention para sa inter-language na mga tawag. Ang panawagan ng mga function ay nangangailangan ng tatlong array:

Syntax ng Python

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

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

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

Mga Halimbawa ng Personal o Nakabahaging Script

Mga halimbawa sa Input/Output sa Screen detalye ng Python hanggang sa Basic na invocation call. Pagsubaybay sa Mga Kaganapan sa Dokumento inilalarawan ang paggamit ng *args Python idiom para mag-print ng variable na bilang ng mga parameter Access2Base dialog ng pag-log console.

tip

Sa oras ng pag-unlad maaari mong matakpan ang pagpapatupad ng script ng Python gamit Extension ng Xray upang siyasatin ang mga katangian at pamamaraan ng mga bagay ng UNO. Ang APSO extension debugger ay nagpapahintulot sa object introspection gamit ang alinman sa Xray alinman sa mga MRI extension.



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

Mga Halimbawa ng Mga Naka-embed na Script sa Mga Dokumento

*args Maaaring gamitin ang Python simplified syntax kasabay ng LibreOffice Basic routines na tumatanggap ng variable na bilang ng mga argumento. sa ibaba Print at SUM Tinatawag ng mga function ng Python ang kanilang Basic Print at SUM katapat, gamit ang nabanggit getBasicScript function. Hindi detalyado ang paghawak ng exception.


	  # -*- coding: utf-8 -*-
	  from __future__ import unicode_literals
	      
	  def Print(*args):
	      """Ina-output ang mga tinukoy na string o numeric na expression sa isang dialog box."""
	      xScript = getBasicScript("Print", "Scripting", embedded=True)
	      xScript.invoke((args), (), ())
	      
	  def SUM(*args):
	      """SUM ang tinukoy na expression ng numero."""
	      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,)
	  

Ang LibreOffice Basic Print at SUM ang mga gawaing nakabatay sa dokumento ay tumatanggap ng variable na bilang ng mga argumento. Ang Pribado o Pampubliko walang epekto ang mga katangian. Ang pagsuri sa uri ng mga argumento ay nilaktawan para sa kalinawan.


	  Option Compatible ' "Standard.Scripting" module
	  Option Explicit
	      
	  Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
	      ''' I-print ang listahan ng item ng variable na numero '''
	      ' lahat ng CStr() convertible arg ay tinatanggap
	      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 isang variable na listahan ng mga numero '''
	      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()
	  

Mangyaring suportahan kami!