テキストエディタやワープロソフトをマクロで操作する場合、マクロで操作する位置について考える必要があります。 まず、カーソル位置に、マクロでテキストを追加する方法を思い浮かべると思います。しかし、マクロの処理速度の問題から、新規文書を完成した文書に加工する方法は、ほとんど行われません。
基本的には、加工する文書や文書のテンプレートに対して、特定のテキストや書式を検索で特定して、その検索した位置をマクロで操作します。具体的には、名前や住所を差し替える差し込み印刷に相当する操作をマクロで行います。
位置の指定
Writerで使用するマクロは、主に文書の入力作業の軽減と推敲の支援を目的に作成します。
マクロで文書を変更するには、変更する位置を何らかの方法で指定する必要があります。
具体的には、以下の位置です。
- カーソル位置
- 選択範囲
- 検索で一致した範囲
「カーソル位置」、「選択範囲」を変更するマクロは、主に文書の入力時に使用します。何度も同じことを繰り返す複数の操作で行う入力作業をマクロで行うことで、作業時間と作業負荷を軽減します。
「検索で一致した範囲」を変更するマクロは、主に完成した文書に使用します。見出しのスタイルの変更や用語の統一、スペルミスの修正などを行う際に使用します。
カーソル位置に特定の文字を挿入する
カーソル位置に特定の文字を挿入することができれば、LibreOffice Witerの標準機能の定型文のような操作を実現できます。
定型文機能
定型文機能は、ツール→定型文を選択すると利用できます。
特定の文字や文章をカーソル位置に挿入することができます。
定型文機能のように、カーソル位置に、挿入するには、カーソル位置を指定する必要があります。
では、マクロを確認します。
新規文書を作成した後、マクロの記録を選択し、「文字列を追加する」とキーボードから入力し、マクロの記録を終了します。
マクロの記録では、次のようなコードが得られます。
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
インターネットで調べてみるとカーソル位置に文字列を追加するコードは、以下のコードでも可能です。このマクロでは、挿入された文字は、選択された状態でマクロが終了します。
Sub InsertString_2
'writer 現在のカーソル位置に文字列を挿入する。
ThisComponent.CurrentController.getViewCursor.setString("文字列を追加する")
End Sub
選択した文字の文字色を変更する
選択した範囲にマクロを実行したいことはよくあると思います。
選択範囲を取得するコードをマクロの記録で取得します。
選択した範囲の文字色を「Light Blue 1」に変更します。
sub SelectionColorChange
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 = "Color"
args1(0).Value = 1799612
dispatcher.executeDispatch(document, ".uno:Color", "", 0, args1())
end sub
LibreOffice Writerでマクロを使用して検索や置換を行う
ワープロソフトやテキストエディタで、マクロを使用してテキストを加工する際の最も一般的な方法の1つは、正規表現を使った検索で場所を指定し、その位置を変更することです。もちろん、検索に正規表現を使用する必要はありません。更に、正規表現を使うことで、より柔軟な検索を行うことができます。
Libreoffice Basic言語部分の知識
プログラムの制御構文、変数や演算子など、Basicマクロ言語として、共通に利用されてる知識やルールがあります。一般のプログラミング言語では、これらの知識を把握するところから始める必要があります。
Basicマクロで、Calc文書を操作する
Officeアプリケーションのマクロの情報は、表計算ソフトについての情報が最も多いです。
LibreOffice Calcも同様に、インターネット上のマクロに関する情報は、Calcのものが多く紹介されています。
LibreOfficeのマクロのドキュメントとインターネット上の情報
マクロに関する情報は、インナーネット上のドキュメントを探す必要があります。