新規作成日 2018-04-05
最終更新日
正規表現パターンに一致する文字列をブックマークに追加します。
説明
次の例は、極めて類似していることを行います。しかし、今回は、私たちは、単語の色を変更しませんが、それらのそれぞれにブックマークを挿入します。このように、あなたは、単語から単語まで、直接移動するために、StarOfficeナビゲーターを使用することができます。ブックマークは、まず、createInstance()を使用して、作成する必要があります。それらは、続いて、現在のテキストの領域に、insertTextContent()で挿入されます。
前述の例との主な違いは、markList()のForループです。現在の単語の色を変更する代わりに、それは、新しいブックマーク、整数を添付した現在の単語名前oBookmarkを作成します。それは、続いて、単語に、このブックマークを挿入します。
サンプルマクロが含まれているドキュメントの所在
サンプルマクロが含まれているドキュメントが保存されている場所
サンプルマクロが含まれているドキュメントへのリンク「inserting_bookmarks.odt」
サンプルマクロが含まれているドキュメントを開く
ドキュメントを開くと、英語の文章が記入されており、その下に「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