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

LibreOffice 6.0 Basicのサンプルコード「inserting_bookmarks.odt」

新規作成日 2018-04-05
最終更新日

正規表現パターンに一致する文字列をブックマークに追加します。

説明

次の例は、極めて類似していることを行います。しかし、今回は、私たちは、単語の色を変更しませんが、それらのそれぞれにブックマークを挿入します。このように、あなたは、単語から単語まで、直接移動するために、StarOfficeナビゲーターを使用することができます。ブックマークは、まず、createInstance()を使用して、作成する必要があります。それらは、続いて、現在のテキストの領域に、insertTextContent()で挿入されます。

前述の例との主な違いは、markList()のForループです。現在の単語の色を変更する代わりに、それは、新しいブックマーク、整数を添付した現在の単語名前oBookmarkを作成します。それは、続いて、単語に、このブックマークを挿入します。

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

サンプルマクロが含まれているドキュメントが保存されている場所

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

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

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

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

ボタンを押すとマクロが実行され、ブックマークに、正規表現パターンで、指定された単語が登録されます。ブックマークをクリックするとその単語の位置にカーソルが移動します

ボタンを押すとマクロが実行され、ブックマークに、正規表現パターンで、指定された単語が登録されます。ブックマークをクリックするとその単語の位置にカーソルが移動します

コードの内容を確認する

コードは、以下のように記述されています。

Sub Main

  ' 変数を宣言する
  Dim mOffending(3) As String
  Dim mBad(3) As String
  Dim sOffendPrefix As String
  Dim sBadPrefix As String

 ' 検索リスト
  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\>")

  sOffendPrefix = "Offending"
  sBadPrefix = "BadStyle"

  markList(mOffending(), sOffendPrefix)
  markList(mBad(), sBadPrefix)
End Sub


Sub markList(mList As Variant, sPrefix As String)

  ' 変数を宣言する
  Dim n As Long, nCount As Long
  Dim oDocument As Object
  Dim oSearch As Object, oFound As Object
  Dim oFoundCursor As Object
  Dim oBookmark As Object

  ' 処理の対象とするドキュメントを指定する 
  oDocument = ThisComponent
  
   '  oSearchをoDocument.createSearchDescriptorオブジェクトとして定義する
  oSearch = oDocument.createSearchDescriptor
  
    ' 正規表現による検索を有効にする
  oSearch.SearchRegularExpression = TRUE
  
  ' カウンターをリセットする
  nCount=0
  For n = LBound(mList()) To UBound(mList())
   ' mList()配列の要素それぞれについて実行します。
    ' ubound関数は引数に指定した配列で使用できる最も大きいインデックス番号を返します。
    ' lbound関数は引数に指定した配列で使用できる最も小さいインデックス番号を返します。  

     ' 検索文字列を指定する  
   oSearch.SearchString = mList(n)
   
  ' findFirstで、最初に見つかる検索結果を取得する 
   oFound = oDocument.findFirst(oSearch)
   
   While NOT IsNull(oFound)  ' 見つかった時の処理

   ' カウンタを増やす
    nCount=nCount+1
    
    ' 見つかった要素のカーソル位置を取得する 
    oFoundCursor = _
     oFound.Text.createTextCursorByRange(oFound)

      ' oBookmarkを oDocument.createInstance("com.sun.star.text.Bookmark")オブジェクト変数として定義する
    oBookmark = _
     oDocument.createInstance("com.sun.star.text.Bookmark")
     
    ' ブックマークの名前を指定する
    oBookmark.Name=sPrefix + CStr(nCount)
    
    ' ブックマークを挿入する
    oDocument.Text.insertTextContent(oFoundCursor,_
                                     oBookmark,TRUE)
	
	' 次の項目を指定する
    oFound = oDocument.findNext(oFound, oSearch)
   Wend
  Next n
End Sub
このエントリーをはてなブックマークに追加