説明
他のアプリケーションの自動的なテキストの修正は、文体の疑問と関連しています。あなたの会社の方針が、特定の言葉の使用を避けることだとします。あなたは、これらの単語を置き換えたいです。しかし、あなたが、文脈に依存する適切な置換を見つける必要があるため、自動的に行うことができません。それで、自動的に、問題のある単語を削除するか、置き換える代わりに、あなたは、後に続く、手作業の校正作業の間、目立つように、それらの色を変更します。次の例は、2種類の不必要な言い回しを処理します。:絶対に禁止されており、何か他のものに置き換える必要があるもの、そして、良くない体裁と考えられるもの。サブルーチンは、変更する役割を果たします。それは、テキスト文書内のリストに現れる全ての単語を、特定の色に変更することができます。リストを短く維持するために、私たちは、単語(複数形、形容詞など)の変形を提供する正規表現を使用します。
サンプルマクロが含まれているドキュメントの所在
サンプルマクロが含まれているドキュメントが保存されている場所:https://api.libreoffice.org/examples/basic/text/modifying_text_automatically/
サンプルマクロが含まれているドキュメントへのリンク
サンプルマクロが含まれているドキュメントを開く
ドキュメントを開くと、英語の文章が記入されており、その下に「Coloring words」というボタンが配置されています。
「Coloring words」ボタンを押すとマクロが実行され、パターンに一致した単語に色がつきます。
マクロが実行されない場合は、セキュリティ設定を確認して下さい。
このマクロでは、「元に戻す」が有効になっているので、マクロで行われた文字属性の変更を元に戻すことができます。
コードの内容を確認する
コードは、以下のように記述されています。
Sub Main
' 変数を宣言する
Dim mOffending(3) As String
Dim mBad(3) As String
Dim nOffendColor As Long
Dim nBadColor As Long
' 置換リスト
mOffending() = Array("negro(e|es)?","bor(ed|ing)?", _
"bloody?", "bleed(ing)?")
mBad() = Array("possib(le|ilit(y|ies))", _
"real(ly)+", "brilliant", "\<[a-z]+n\'t\>")
' 色を定義
nOffendColor = RGB(255,0,0)
nBadColor = RGB(255,128,0)
colorList(mOffending(), nOffendColor)
colorList(mBad(), nBadColor)
End Sub
Sub colorList(mList As Variant, nColor As Long)
' 変数を宣言する
Dim n As Long
Dim oDocument As Object
Dim oSearch As Object, oFound As Object
Dim oFoundCursor As Object
' 処理の対象とするドキュメントを指定する
oDocument = ThisComponent
' oSearchをoDocument.createSearchDescriptorオブジェクトとして定義する
oSearch = oDocument.createSearchDescriptor
' 正規表現による検索を有効にする
oSearch.SearchRegularExpression = TRUE
For n = LBound(mList()) To UBound(mList())
' mList()配列の要素それぞれについて実行します。
' ubound関数は引数に指定した配列で使用できる最も大きいインデックス番号を返します。
' lbound関数は引数に指定した配列で使用できる最も小さいインデックス番号を返します。
' 検索文字列を指定する
oSearch.SearchString = mList(n)
' findFirstで、最初に見つかる検索結果を取得する
oFound = oDocument.findFirst(oSearch)
While NOT IsNull(oFound) ' 見つかった時の処理
' 見つかった要素のカーソル位置を取得する
oFoundCursor = _
oFound.Text.createTextCursorByRange(oFound)
' カーソル位置の色を変更する
oFoundCursor.CharColor = nColor
' findNextで、次に見つかる検索結果を取得する
oFound = oDocument.findNext(oFound, oSearch)
Wend
Next n
End Sub