LibreOfficeで文字列をテキストファイルへ書き出す

Dim saveFilePath As String
saveFilePath = "/tmp/test.txt"
Dim lines as Object
lines = New Collection
lines.Add("test1")
lines.Add("test2")
Dim simpleFileAccess As Object
simpleFileAccess = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
If simpleFileAccess.exists(saveFilePath) Then
    simpleFileAccess.kill(saveFilePath)
End If
Dim textOutputStream As Object
textOutputStream = CreateUnoService("com.sun.star.io.TextOutputStream")
Dim outputStream As Object
outputStream = simpleFileAccess.openFileWrite(saveFilePath)
textOutputStream.setOutputStream(outputStream)
textOutputStream.setEncoding("UTF-8")
For Each line In lines
    textOutputStream.writeString(line)
    textOutputStream.writeString(Chr(10))
Next line
textOutputStream.closeOutput()

LibreOfficeのVBで連想配列を使用する

GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
Dim dictionary as Object
dictionary = CreateScriptService("Dictionary")
dictionary.Add("test1", 123)
dictionary.Add("test2", 456)
Print(dictionary.Exists("test1"))
dictionary.Remove("test2")
Print(dictionary.Exists("test2"))
For Each key in dictionary.Keys
    Print(key)
    Print(dictionary.Item(key))
Next
Print(dictionary.Count)

LibreOfficeで他のドキュメントのマクロ(Function)を実行する

Calcを使用して「test.ods」から「呼び出されるドキュメント.ods」のFunctionを呼び出して結果を取得するのが目的。Version: LibreOffice 6.4.7.2

呼び出されるドキュメント.odsのFunctionは下記の通り。

Function Test(a, b)
    Print a
    b = "test3"
    Test = 1
End Function

test.odsから呼び出して結果を取得する。

Dim document As Object
document = StarDesktop.loadComponentFromURL(ConvertToUrl("/home/user/Desktop/呼び出されるドキュメント.ods"), "_blank", 0, Array())
Dim scriptProvider As Object
scriptProvider = document.getScriptProvider()
Dim url As String
url ="vnd.sun.star.script:Standard.Module1.Test?language=Basic&location=document"
Dim script As Object
script = scriptProvider.getScript(url)
Dim args As Object
args = array("test1", "test2")
Dim argsAfterFinishing As Object
argsAfterFinishing = array()
'test1と1が表示される
Print script.invoke(args, 0, argsAfterFinishing)
'test2が表示される
Print args(1)
'test3が表示される
Print argsAfterFinishing(1)

LibreOfficeでPostgreSQLデータベースにJDBCで接続

On Error Goto ErrorHandler
'Properties
Dim properties(2) As New com.sun.star.beans.PropertyValue
properties(0).Name = "user"
properties(0).value = "UserName"
properties(1).Name = "password"
properties(1).value = "Pass"
properties(2).name = "JavaDriverClass"
properties(2).value = "org.postgresql.Driver"
'Driver manager
Dim driverManager As Object
driverManager = createUnoService("com.sun.star.sdbc.DriverManager")
'Connection
Dim connection As Object
connection = driverManager.getConnectionWithInfo("jdbc:postgresql://192.168.0.1:5432/database-name", properties())
'Statement
Dim statement As Object
statement = connection.createStatement()
'Execute and number of update records
Print statement.executeUpdate("DELETE FROM table1;")
'ResultSet
Dim resultSet As Object
resultSet = statement.executeQuery("SELECT * FROM table2;")
While resultSet.Next
    Print resultSet.getString(1)
Wend
'Close
statement.close()
connection.close()
connection.dispose()
Exit Sub
'Error handle
ErrorHandler:
If IsNull(statement) = false Then
    statement.close()
End If
If IsNull(connection) = false Then
    If connection.isClosed() = false Then
        connection.close()
        connection.dispose()
    End If
End If
If InStr(Error$, "org.postgresql.Driver") > 0 Then
    MsgBox("ツール→オプション→LibreOffice→詳細→クラスパスからPostgreSQLのJDBCドライバーを追加してください。", 64, "初期設定")
Elseif Len(Error$) > 0 Then
    MsgBox(Error$, 16, "エラー")
End If

LibreOfficeのCalcでダイアログを作成して表示する

「ツール」→「マクロ」→「ダイアログの管理」から追加した”Dialog1″を表示してダイアログ内のテキストフィールドの値を取得するコード。ちなみにダイアログをコードで閉じるにはdialogオブジェクトのendexecute()メソッドを呼ぶ。

'Show dialog
DialogLibraries.LoadLibrary("Standard")
dialog = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
dialog.execute()
'Get text
Dim textField As Object
textField = dialog.getControl("TextField1")
Dim value As String
value = textField.getText()