Memanggil Skrip Python dari Basic

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

tip

Paparan yang masuk akal untuk LibreOffice 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, LibreOffice 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

LibreOffice Application Programming Interface (API) Scripting Framework mendukung eksekusi skrip antar-bahasa antara Python dan Basic, atau bahasa pemrograman lain yang didukung untuk hal tersebut. Argumen dapat dioperkan bolak balik lintas panggilan, asalkan mereka mewakili tipe data primitif yang dikenali kedua bahasa tersebut, dan dengan asumsi bahwa Scripting Framework mengubahnya 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 LibreOffice
         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 LibreOffice
             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 LibreOffice 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()
             '''LibreOffice 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

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

Mohon dukung kami!