Home > コンピュータ > LibreOffice > マクロ > Basic > Witer > LibreOffice Writerで、文字をカーソル位置に挿入するマクロ

LibreOffice Writerで、文字をカーソル位置に挿入するマクロ

新規作成日 2018-03-29
最終更新日

マクロの記録で取得したコード

新規文書を作成した後、マクロの記録を選択し、「文字列を追加する」とキーボードから入力し、マクロの記録を終了します。

マクロの記録では、次のようなコードが得られます。

REM  *****  BASIC  *****

sub InsertString
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = "文字列を追加する"

dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())

end sub

カーソル位置に、文字列を挿入するには、カーソル位置を指定する必要があります。

アクティブな(操作できる状態の)LinbreOfficeアプリケーションが、ThisComponent、現在のカーソルのある場所が、CurrentControllerと考えて良さそうです。

そこから、アクティブな(操作できる状態の)LinbreOfficeアプリケーションの、現在のカーソルのある場所が、ThisComponent.CurrentControllerで、表されているものと思われます。

executeDispatch(document, ".uno:InsertText", "", 0, args1())

を使用して、テキストを挿入、あるいは、置換しています。

挿入、あるいは、置換するテキストは、配列の形で指定しています。つまり、このコードでは、args1(0).Valueの値を変更すれば、いろいろな文字列を挿入できます。

実行して動作を確認

マクロを実行すると、領域選択していない場合は、挿入され、領域選択している場合は、置換されます。そして、カーソル位置は、挿入、あるいは、置換した文字の後ろに移動します。

setStringを使って、カーソル位置に文字列を設定する

インターネットで調べてみるとカーソル位置に文字列を追加するコードは、以下のコードでも可能です。このマクロでは、挿入された文字は、選択された状態でマクロが終了します。

Sub InsertString_2
'writer 現在のカーソル位置に文字列を挿入する。

ThisComponent.CurrentController.getViewCursor.setString("文字列を追加する")

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