新規作成日 2025-08-28
最終更新日
私たちは、UNOディスパッチャーを使用して、LibreOfficeを操作する方法を、マクロの記録で得られるコードで、慣れ親しんでします。
ディスパッチャーの特徴は、executeDispatchメソッドに、コマンドを引数としてわたして、実行する点です。
(関数やメソッドのような)コールバック関数を引数としてわたし、実行する内容を変化させる仕組みは、比較的新しいプログラミングスタイルです。ちなみに、javascriptやC#では、デリゲートやラムダ式として知られています。
言い換えると、このスタイルのプログラミングの考え方を理解していないと、理解するのに苦痛を伴うと思われます。
UNOディスパッチャーを使用してタスクを実行するには、次の3つの要素が必要です。
- ディスパッチするコマンド
- ディスパッチを制御する引数
- ディスパッチを実行できるオブジェクト(ディスパッチ・プロバイダーは、通常、フレームです)。
それぞれの文書には、大まかに、外部とドキュメントの間のインターフェイスとして機能するコントローラーがあります。
サンプルコード マクロの記録で取得した「カーソル位置に、テキストを挿入する例」 (Writer)
sub InsertString
rem ----------------------------------------------------------------------
rem define variables
rem 使用する変数を定義する
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
REM ドキュメントにアクセスする
REM UNOディスパッチャーが、操作の対象とするオブジェクトは、Frameです。
REM 次行のコードは、Writerでは、選択範囲、あるいは、カーソル位置を取得する
document = ThisComponent.CurrentController.Frame
REM ディスパッチャー・オブジェクトのインスタンスを作成する
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
REM 引数を格納するオブジェクト変数を宣言する
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = "文字列を追加する"
REM ディスパッチするコマンドを指定して、executeDispatchメソッドを実行する
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
end sub
※実行した後のカーソルの状態が、選択状態かどうかに着目してください。
コマンドと引数(Writer)
executeDispatchメソッドを使用するために、操作する動作と、コマンドと引数を知っていることが必要です。
引数は、com.sun.star.beans.PropertyValueオブジェクトに格納する必要があります。
OpenOffice.org 3.x向けのドキュメントが存在しますが、時間が経過しているので自分で確認し、作成し、管理することをお勧めします。
操作 | 第2引数 | 第4引数 |
---|---|---|
テキストを挿入する | .uno:InsertText |
|
文字色を変更する | .uno:Color |
|
日付フィールドに、今日の日付を「0000年0月00日」形式で挿入する | .uno:InsertField |
|
参考
