説明
あなたが、編集のために、他の人から文書を定期的に受け取る場合、あなたは、特定の単語が、常に同じに書かれていることを確認したいかもしれません。次の例は、特定の単語が、アメリカ英語で綴られていることを強制することによって、これを説明します。
この例が、機能するためには、あなたは、開いたテキスト文書から、それを実行する必要があります。現実のアプリケーションのために、外部ファイルから、単語を読み込むことをお勧めします。
サンプルマクロが含まれているドキュメントの所在
サンプルマクロが含まれているドキュメントが保存されている場所:https://api.libreoffice.org/examples/basic/text/modifying_text_automatically/
サンプルマクロが含まれているドキュメントへのリンク:replacing_text.odt
サンプルマクロが含まれているドキュメントを開く
ドキュメントを開くと、英語の文章が記入されており、その下に「Start changing」というボタンが配置されています。
「Start changing」ボタンを押すとマクロが実行され、赤で強調された英国単語のスペルが、米国単語に修正されます。 マクロが実行されない場合は、セキュリティ設定を確認して下さい。
このマクロでは、「元に戻す」が有効になっているので、マクロで行われた文字属性の変更を元に戻すことができます。
コードの内容を確認する
コードは、以下のように記述されています。
Sub Main
' 置換リストに従って文字列を置換する
' 英国表記の単語を米国表記の単語に置換します。
' 変数を宣言する
Dim mBritishWords(5) As String
Dim mUSWords(5) As String
Dim n As Long
Dim oDocument As Object
Dim oReplace As Object
' 置換リスト
mBritishWords() = Array("colour", "neighbour", "centre", _
"behaviour", "metre", "through")
mUSWords() = Array("color", "neighbor", "center", _
"behavior", "meter", "thru")
' 処理の対象とするドキュメントを指定する
oDocument = ThisComponent
' oReplaceをoDocument.createReplaceDescriptorオブジェクトとして定義する
oReplace = oDocument.createReplaceDescriptor
For n = lbound(mBritishWords()) To ubound(mBritishWords())
' mBritishWords()配列の要素それぞれについて実行します。
' ubound関数は引数に指定した配列で使用できる最も大きいインデックス番号を返します。
' lbound関数は引数に指定した配列で使用できる最も小さいインデックス番号を返します。
' 検索文字列を指定する
oReplace.SearchString = mBritishWords(n)
' 置換文字列を指定する
oReplace.ReplaceString = mUSWords(n)
' 置換を実行する
oDocument.replaceAll(oReplace)
Next n
End Sub
解説:配列の値に従い連続で置換する
配列の値に従い単語を検索し、置換します。
多くの置換条件を一度に実行する操作は、テキスト処理で最もよく使用する機能の1つだと思います。操作そのもののサンプルプログラムが用意されているので有効に活用しましょう。
使用する変数を宣言します。
' 変数を宣言する
Dim mBritishWords(5) As String
Dim mUSWords(5) As String
Dim n As Long
Dim oDocument As Object
Dim oReplace As Object
検索する単語、置換する単語の配列を作成します。
mBritishWords() = Array("colour", "neighbour", "centre", _
"behaviour", "metre", "through")
mUSWords() = Array("color", "neighbor", "center", _
"behavior", "meter", "thru")
対象のドキュメントを指定します。
' 処理の対象とするドキュメントを指定する
oDocument = ThisComponent
検索するために、oDocument.createSearchDescriptorオブジェクトをしようしますが、置換するためには、oReplace変数を、oDocument.createReplaceDescriptorオブジェクトとして定義します。定義後、このオブジェクト変数は、置換条件を表します。
操作 | オブジェクト |
---|---|
検索 | oDocument.createSearchDescriptorオブジェクト |
置換 | oDocument.createReplaceDescriptorオブジェクト |
' oReplaceをoDocument.createReplaceDescriptorオブジェクトとして定義する
oReplace = oDocument.createReplaceDescriptor
検索する単語の配列と置換する単語の配列に従って、配列のそれぞれの項目ごとに、置換処理を実行します。
配列のそれぞれの項目ごとに、実行するために、For ~ Next文を使用しています。配列のインディックスの最小値と最大値の取得には、ubound関数とlbound関数を使用しています。
For n = lbound(mBritishWords()) To ubound(mBritishWords())
' mBritishWords()配列の要素それぞれについて実行します。
' ubound関数は引数に指定した配列で使用できる最も大きいインデックス番号を返します。
' lbound関数は引数に指定した配列で使用できる最も小さいインデックス番号を返します。
' 検索文字列を指定する
oReplace.SearchString = mBritishWords(n)
' 置換文字列を指定する
oReplace.ReplaceString = mUSWords(n)
' 置換を実行する
oDocument.replaceAll(oReplace)
Next n