Basic w Python

Wopśimjeśe

# Skripty Python z Basic wuwołaś

Wuwołanje skriptow Python z makrow LibreOfficeDev jo móžne, a wužytne funkcije su k dispoziciji, na pśikład:

- Identifikacija ComputerName abo namakanje OSName stej móžnej,

- Funkcija Basic FileLen()a com.sun.star.ucb.SimpleFileAccess. API-funkcija getSize() ma górnu granicu 2 gigabajtowu datajoweje wjelikosći, kótaruž Python wopytujo zmejstrowaś,

- com.sun.star.util.PathSettings dajo se normalizěrowaś,

- a wjele wěcej.

Pśiměrjony wobchad z LibreOfficeDev Basic a z funkcijami zwězowańskego městna programěrowanja nałoženjow (API) se pśiraźijo, nježli až se wuwołanja mjazy rěcami wót Basic do Python, do JavaScript abo do drugeje skriptoweje rěcy wuwjadu.

## Skripty Python wótwołaś

Skripty Python mógu priwatne, wózjawjone abo do dokumentow zasajźone byś. Aby je wuwjadł, LibreOfficeDev Basic městna skriptow Python trjeba. Pytanje za UNO-objektami, kótarež su kompatibelne z com.sun.star.script.provider.XScript wam zmóžnja, skripty Python wuwjasć:

             Option Explicit

             Public Function GetPythonScript(macro As String, _
                     Optional location As String) As com.sun.star.script.provider.Xscript
                 ''' Skriptowy objekt Python se do wuwjeźenja wobstaraś
                 ' Argumenty:
                 ' Makro: ako "library/module.py$macro" abo "module.py$macro"
                 ' Městno: ako "document", "share", "user" abo ENUM(eracija)
                 ' Wuslědk:
                 ' pyta słužbu com.sun.star.script.provider.XScript-UNO'''
                 If IsMissing(location) Then location = "user"
                 Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
                 Dim sp As Object ' kompatibelny z com.sun.star.script.provider.XScriptProvider
                 Dim uri As String
                 If location="document" Then
                     sp = ThisComponent.getScriptProvider()
                 Else
                     mspf = CreateUnoService("com.sun.star.script.provider.MasterScriptProviderFactory")
                     sp = mspf.createScriptProvider("")
                 End If
                 uri = "vnd.sun.star.script:"& macro &"?language=Python&location="& location
                 GetPythonScript = sp.getScript(uri)
             End Function ' GetPythonScript

## Skripty Python wuwjasć

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.

### Syntaksa

workstation_name = script.invoke(Array(), Array(), Array())

opSysName = script.invoke(Matrix(), in_outs, Matrix()) ' in_out jo pólna wariabla

file_len = script.invoke(Array(systemFilePath), Array(), Array())

normalizedPath = script.invoke(Array(systemFilePath), Array(), Array())

### Pśikłady za zasajźone skripty

Pód rutinami ComputerName a GetFilelen se jeju pendanta Python wuwołujotej, z pomocu do togo naspomnjeteje funkcije GetPythonScript. Wobchad z wuwześim njejo datailěrowane.

             Option Explicit
             Kompatibelne nastajenje ' Kakosći so pódpěraju

             Private scr As Object ' com.sun.star.script.provider.XScript

             Private Property Get ComputerName As String
                 '''Mě źěłoweje stacije'''
                 scr = GetPythonScript("Platform.py$computer_name", "document")
                 ComputerName = scr.invoke(Array(), Array(), Array())
             End Property ' ComputerName

             Private Function GetFilelen(systemFilePath As String) As Currency
                 '''Datajowa wjelikosć w bajtach'''
                 scr = GetPythonScript("Os/Path.py$get_size", Script.ISEMBEDDED)
                 GetFilelen = scr.invoke(Array(systemFilePath), Array(), Array(),)
             End Function ' GetFilelen

             Private Type _SCRIPT_LOCATION
                 ISEMBEDDED As String ' dokumentowy skript
                 ISPERSONAL As String ' wužywaŕski skript
                 ISSHARED As String ' makro LibreOfficeDev
             End Type ' _SCRIPT_LOCATION

             Public Function Script() As Object ' Text enumeration
                 Static enums As _SCRIPT_LOCATION : With enums
                 If .ISEMBEDDED = "" Then
                     .ISEMBEDDED = "document" ' dokumentowy skript
                     .ISPERSONAL = "user" ' wužywaŕske skripty
                     .ISSHARED = "share" ' makro LibreOfficeDev
                 End If : End With ' enums
                 Script = enums
             End Function ' Script

Dwa rozdźělnej modula Python se wuwołujotej. Dajotej se pak do aktualnego dokumenta zasajźiś pak w datajowem systemje składowaś. Pśeglědowanje argumentowego typa se z pśicynow pśeglědnosći pśeskokujo:

- Platform.py

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

             import platform

             def computer_name() -> str:
                 return platform.node()

             def OSname() -> str:
                 return platform.system()

- Os/Path.py

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

             import os.path

             def get_size(systemFilePath: str) -> str:
                 return str(os.path.getsize(systemFilePath))

             def normalyze(systemPath: str) -> str:
                 return os.path.normpath(systemPath)

### Pśikłady za priwatne abo zgromadnje wužyte skripty

Wuwołański mechanizm za priwatne abo zgromadnje wužyte skripty Python jo identiski z tym zasajźonych skriptow. Mjenja bibliotekow se zarědnikam pśirěduju. Woblicenje systemowych sćažkow wužywaŕskich profilow a zgromadnje wužytych modulow dajo se ako w Pósejźeńske informacije wótwołaś wopisane pśewjasć. Pód rutinami OSName, HelloWorld a NormalizePath swóje pendanty Python wuwołuju, z pomocu górjejce naspomnjeteje funkcije GetPythonScript. Wobchad z wuwześim njejo detailěrowane.

             Option Explicit
             Kompatibelne nastajenje ' Kakosći se pódpěraju

             Private scr As Object ' com.sun.star.script.provider.XScript

             Private Property Get OSName As String
                 '''Platformowe mě "Linux", "Darwin" abo "Windows"'''
                 scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
                 OSName = scr.invoke(Array(), Array(), Array())
             End Property ' OSName

             Private Sub HelloWorld()
                 '''Pśikład za zgromadny LibreOfficeDev Python'''
                 scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
                 scr.invoke(Array(), Array(), Array(),)
             End Sub ' HelloWorld

             Public Function NormalizePath(systemFilePath As String) As String
                 '''Wuzbytny wótrězk '\..' w sćažce'''
                 scr = GetPythonScript("Os/Path.py$normalyze", "user")
                 NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
             End Function ' NormalizePath

## Standardne module Python

Do LibreOfficeDev zasajźony Python wjele standardnych bibliotekow wopśimujo, z kótarychž móžośo wužytk měś. Wopśimuju wjele funkcijow, mjazy drugim:

- argparse Parser za opcije pśikazoweje smužki, argumenty a pódpśikaze

- cmath Matematiske funkcije za kompleksne licby

- csv CSV-dataje cytaś a pisaś

- datetime Cyste datumowe a casowe typy

- json Encoder a decoder JSON

- math Matematiske funkcije

- re Operacije z regularnymi wurazami

- socket Seśowe zwězowańske městno niskeje rowniny

- sys Specifiske parametry a funkcije systema

- unittest a trace Wokolina za testowanje jadnotkow a slědowanje wuwjeźenjow Python

- xml.etree.ElementTree API ElementTree XML

Pódobne temy

Makra Basic z Python wuwołaś

LibreOfficeDev Basic Help

LibreOfficeDev Pomoc wó skriptach Python

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