Home > コンピュータ > LibreOffice > マクロ

LibreOffice 6.0 Basicのサンプルコード「Replacing Text」

新規作成日 2017-12-12
最終更新日

説明

あなたが、編集のために、他の人から文書を定期的に受け取る場合、あなたは、特定の単語が、常に同じに書かれていることを確認したいかもしれません。次の例は、特定の単語が、アメリカ英語で綴られていることを強制することによって、これを説明します。

この例が、機能するためには、あなたは、開いたテキスト文書から、それを実行する必要があります。現実のアプリケーションのために、外部ファイルから、単語を読み込むことをお勧めします。

サンプルマクロが含まれているドキュメントの所在

サンプルマクロが含まれているドキュメントが保存されている場所:https://api.libreoffice.org/examples/basic/text/modifying_text_automatically/

サンプルマクロが含まれているドキュメントへのリンク:replacing_text.odt

サンプルマクロが含まれているドキュメントを開く

ドキュメントを開くと、英語の文章が記入されており、その下に「Start changing」というボタンが配置されています。

サンプルマクロが含まれているドキュメントを開く

「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
このエントリーをはてなブックマークに追加