Memanggil Skrip Python dari Basic

Memanggil skrip Python dari makro Collabora Office Basic memungkinkan, dan fitur berharga yang bisa didapatkan seperti:

tip

Paparan yang masuk akal untuk Collabora Office Basic dan fitur Antarmuka Aplikasi Pemrograman (API) direkomendasikan sebelum melakukan panggilan antar-bahasa dari Basic ke Python, JavaScript atau mesin skrip lainnya.


Mengambil Skrip Python

Skrip Python dapat bersifat pribadi, dapat dibagikan, atau disematkan dalam dokumen. Untuk mengeksekusinya, Collabora Office Basic perlu disediakan dengan lokasi skrip Python. Menemukan obyek UNO yang patuh antar muka com.sun.star.script.provider.XScript memungkinkan eksekusi skrip Python:

Option Explicit

Public Function GetPythonScript(macro As String, _
        Optional location As String) As com.sun.star.script.provider.Xscript
    ''' Ambil obyek skrip Python sebelum mengeksekusi
    ' Argumen:
    '    macro   : sebagai "library/module.py$macro" atau "module.py$macro"
    '    lokasi: sebagai "dokumen", "bagi", "pengguna" atau ENUM(erasi)
    ' Hasil:
    '    terletak layanan UNO com.sun.star.script.provider.XScript '''
    If IsMissing(location) Then location = "user"
    Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
    kompatibel Dim sp As Object ' 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

Mengeksekusi Skrip Python

Kerangka Skrip Antarmuka Pemrograman Aplikasi (API) Collabora Office mendukung eksekusi skrip antar bahasa antara Python dan Basic, atau bahasa pemrograman lain yang didukung dalam hal ini. Argumen dapat diteruskan bolak-balik di seluruh panggilan, asalkan mereka mewakili tipe data primitif yang dikenali oleh kedua bahasa, dan dengan asumsi bahwa Kerangka Skrip mengonversinya dengan tepat.

Sintaksis

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

opSysName = script.invoke(Array(), in_outs, Array()) ' in_out adalah sebuah Array

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

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

Contoh Skrip Tertanam

Di bawah rutin Computer Name, dan GetFilelen memanggil salinan Python, menggunakan fungsi GetPythonScript yang telah dipanggil sebelumnya. Penanganan exception tidak dirinci

Option Explicit
Opsi Properti ' yang Kompatibel didukung

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

Private Property Get ComputerName As String
    '''nama Stasiun Kerja'''
    scr = GetPythonScript("Platform.py$computer_name", "document")
    ComputerName = scr.invoke(Array(), Array(), Array())
End Property ' ComputerName

Private Function GetFilelen(systemFilePath As String) As Currency
    '''Ukuran berkas dalam byte'''
    scr = GetPythonScript("Os/Path.py$get_size", Script.ISEMBEDDED)
    GetFilelen = scr.invoke(Array(systemFilePath), Array(), Array(),)
End Function ' GetFilelen

Private Type _SCRIPT_LOCATION
    skrip dokumen ISEMBEDDED AS String '
    skrip pengguna ISPERSONAL As String '
    ISSHARED As String ' makro Collabora Office
End Type ' _SCRIPT_LOCATION

Public Function Script() As Object ' Text enumeration
    Static enums As _SCRIPT_LOCATION : With enums
    If .ISEMBEDDED = "" Then
        skrip dokumen .ISEMBEDDED = "document" '
        skrip pengguna .ISPERSONAL = "user" '
        .ISSHARED = "share" ' makro Collabora Office
    End If : End With ' enums
    Script = enums
End Function ' Script

Dua modul Python yang berbeda dipanggil. Keduanya dapat ditanamkan di dokumen saat ini, atau disimpan dalam sistem berkas. Pengecekan tipe argumen dilewati untuk kejelasan:

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

import platform

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

def OSname() -> str:
    return platform.system()
# -*- 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)

Contoh Skrip Pribadi atau Bersama

Mekanisme panggilan untuk skrip Python pribadi atau bersama identik dengan skrip yang tertanam. Nama pustaka dipetakan pada folder. Komputasi profil pengguna dan jalur sistem berkas modul bersama Collabora Office dapat dijalankan secara rinci pada Mendapatkan informasi sesi. Rutin OSName, HelloWorld dan NormalizePath berikut memanggil bagian Python masing-masing, menggunakan fungsi GetPythonScript yang telah dipanggil sebelumnya. Penanganan exception tidak terperinci

Option Explicit
Opsi ' Properti Kompatibel didukung

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

Private Property Get OSName As String
    '''Nama platform seperti "Linux", "Darwin" atau "Windows"'''
    scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
    OSName = scr.invoke(Array(), Array(), Array())
End Property ' OSName

Private Sub HelloWorld()
    '''Collabora Office sampel Python bersama
    scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
    scr.invoke(Array(), Array(), Array(),)
End Sub ' HelloWorld

Public Function NormalizePath(systemFilePath As String) As String
    '''Mengeluarkan kelebihan '\..' di jalur'''
    scr = GetPythonScript("Os/Path.py$normalyze", "user")
    NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
End Function ' NormalizePath

Modul standar Python

Collabora Office yang tertanam Python berisi beberapa pustaka standar untuk mendapatkan manfaat. Mereka membawa banyak himpunan fitur, seperti tapi tidak terbatas pada:

Mohon dukung kami!