Home > コンピュータ > LibreOffice > マクロ > Basic > Witer > UNOディスパッチャー

UNOディスパッチャーを使用する

新規作成日 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向けのドキュメントが存在しますが、時間が経過しているので自分で確認し、作成し、管理することをお勧めします。

UNOディスパッチャーのコマンドと引数(Writer)
操作 第2引数 第4引数
テキストを挿入する .uno:InsertText
args1(0).Name = "Text"
args1(0).Value = "文字列を追加する" REM 追加するテキスト
文字色を変更する .uno:Color
args1(0).Name = "Color"
args1(0).Value = 1799612 Rem カラーコード
日付フィールドに、今日の日付を「0000年0月00日」形式で挿入する .uno:InsertField
args1(0).Name = "Type"
args1(0).Value = 0
args1(1).Name = "SubType"
args1(1).Value = 0
args1(2).Name = "Name"
args1(2).Value = ""
args1(3).Name = "Content"
args1(3).Value = "0"
args1(4).Name = "Format"
args1(4).Value = 10041
args1(5).Name = "Separator"
args1(5).Value = " "

参考

このエントリーをはてなブックマークに追加