Isi

# Memanggil Skrip Python dari Basic

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

- identifikasi NamaKomputer atau deteksi NamaOS dimungkinkan

- Fungsi Basic FileLen() dan fungsi API com.sun.star.ucb.SimpleFileAccess.getSize() menunjukan batas atas ukuran berkas sebesar 2 Gigabytes yang diatasi oleh Python,

- com.sun.star.util.PathSettings dapat dinormalisasi

- dan banyak lagi.

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

Kerangka Skrip Antarmuka Pemrograman Aplikasi (API) LibreOffice 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 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:

- 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)

### 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:

- argparse Pengurai untuk opsi baris-perintah, argumen, dan sub-perintah

- cmath Fungsi matematis untuk bilangan kompleks

- csv Pembaca dan penulis berkas CSV

- datetimeTipe tanggal dan waktu yang asli

- json enkoder dan dekoder JSON

- math Fungsi matematis

- re Operasi ekspresi reguler

- socket Antarmuka jaringan tingkat rendah

- sysParameter dan fungsi spesifik sistem

- unittest dan trace Kerangka uji unit dan eksekusi Lacak Python

- xml.etree.ElementTree ElementTree XML API

Topik Terkait

Memanggil Makro Basic dari Python

LibreOffice Basic Help

Bantuan Skrip Python LibreOffice