Innhold

# Anroper Basic Makroer fraPython

Du kan hente LibreOffice Basic makroer fra Python-skript, og viktige funksjoner kan fås i retur. For eksempel:

- Enkle loggfasiliteter fra Access2Base bibliotek Sporingskonsoll,

- Inndataboks og MsgBox skjerm I / O-funksjoner basert på Basic for å underlette Python-utvikling,

- Xray anrop for å avbryte kjøring av Python-skript med hensikt for å inspisere variabler.

LibreOffice Application Programming Interface (API) Scripting Framework, støtter kjøring av ulike språk script mellom Python og Basic, eller andre støttede programmeringsspråk for den saks skyld. Argumenter kan sendes frem og tilbake over anrop, forutsatt at de representerer primitive datatyper som begge språk gjenkjenner, og forutsatt at Scripting Framework konverterer dem på riktig måte.

Det anbefales å ha kunnskap om Python-standardmoduler og LibreOffice API-funksjoner før du kan kjøre anrop fra Python til Basic, JavaScript eller andre skriptmotorer.

Når du kjører Python-skript fra et integrert utviklingsmiljø (IDE), kan Deni LibreOffice-innebygde basicmotoren være fraværende. Unngå Python-til- LibreOffice Basic anrop i slike sammenhenger. Imidlertid er Python-miljøet og Universal Networks Objects (UNO) fullt tilgjengelig. Se Konfigurer et integrert IDE for Python for mer informasjon.

## Henter LibreOffice Basic-skript

LibreOffice Basic makroer kan være personlige, delte eller innebygd i dokumenter. For å kunne kjøre dem, må Python-run-time ha tilgang til de grunnleggende makrolokasjonene. Implementering avcom.sun.star.script.provider.XScriptProvider grensesnittet gir tilgang til å hentekjørbare skript:

    		 import uno
    		 from com.sun.star.script.provider import Xscript

    		 def getBasicScript(macro='Main', module='Module1', library='Standard',
    		         isEmbedded=False) -> XScript:
    		     '''Hent Basic skript objekter før aktivering.'''
    		     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

## Kjører LibreOffice Basic Skript

LibreOffice Software Development Kit (SDK) dokumentasjon for com.sun.star.script.provider.XScript grensesnitett beskriver konvensjonen for anrop mellom språk. Aktivering av funksjoner krever tre matriser:

- den første lister opp argumentene til den kalte rutinen

- den andre identifiserer modifiserte argumenter

- den tredje lagrer returverdiene

### Python-syntaks

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

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

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

### Eksempler på personlige eller delte skript

Eksempler i Inndata/utdata til Skjerm har detaljer om Python til Basic-aktiveringskall. Overvåking av dokumenthendelser illustrerer bruken av * args Python-idiom for å skrive ut et variabelt antall parametere til Access2Base-konsoll-loggingsdialogen.

På utviklingstidspunktet kan du avbryte utførelsen av Python-skript ved hjelp av Xray utvidelser for å inspisere egenskaper og metoder for UNO-objekter. APSO-utvidelsdebuggeren tillater introspeksjon av objekt ved hjelp av enten Xray eller MR-utvidelser.

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

### Eksempler på innebygde skript i dokumenter

*argsPython-forenklet syntaks kan brukes i forbindelse med LibreOffice Basic-rutiner som godtar et variabelt antall argumenter. Under Skriv ut og SUMMER Python-funksjoner anroper deres Basic Skriv ut og SUMMER-motparter, ved å bruke den allerede nevnte getBasicScript-funksjonen. Avvikshåndteringen er ikke videre detaljert.

    	  # -*- coding: utf-8 -*-
    	  from __future__ import unicode_literals

    	  def Print(*args):
    	      """Skriver ut de angitte strengene eller numeriske uttrykk i en dialogboks."""
    	      xScript = getBasicScript("Print", "Scripting", embedded=True)
    	      xScript.invoke((args), (), ())

    	  def SUM(*args):
    	      """SUMMER det spesifiserte talluttrykket."""
    	      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,)

LibreOffice Basic Skriv Ut og SUMMER dokument-baserte rutiner aksepterer et variabelt antallargumenter. Privat eller Offentlig atributterhar ingen effekt. Argumenttypekontrollen hoppes over for tydelighetens skyld.

    	  Option Compatible ' "Standard.Scripting" module
    	  Option Explicit

    	  Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
    	      ''' Skriv ut en liste med variable nummer '''
    	      ' alle CStr() konvertible args aksepteres
    	      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
    	      ''' SUMMER en variabel liste med tall '''
    	      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()

Lignende emner

Anroper Python-skript fra Basic

Pythonprogrammering, eksempel

LibreOffice Python Skript Hjelp

LibreOffice Basic Hjelp

Supporter oss!