Top > OOoBasic > Writer > Search

検索と置換 Edit

検索と置換はどのドキュメントタイプでも同じです。条件の設定はCalc での検索 参照。

一つずつ検索 Edit

findFirst メソッドで最初のものを検索します。それ以降は findNext メソッドで検索します。検索結果は見つからなければ Null、見つかった場合にはテキスト範囲が戻ります。

Sub Search_1
 oDoc = ThisComponent
 oText = oDoc.getText()
 
 oSearchDesc = oDoc.createSearchDescriptor()
 oSearchDesc.SearchString = "a"
 
 oResult = oDoc.findFirst(oSearchDesc)
 
 While NOT IsNull( oResult )
   'msgbox oResult.String
   oResult = oDoc.findNext(oResult,oSearchDesc)
 WEnd
End Sub

全検索 Edit

findAll メソッドで全検索した場合には戻り値は .container.XIndexAccess インターフェースです。コンテナの要素は上記の一つずつ検索した場合と同じくテキスト範囲になります。

Sub Search_2
 oDoc = ThisComponent
 oText = oDoc.getText()

 oSearchDesc = oDoc.createSearchDescriptor()
 oSearchDesc.SearchString = "a"

 oResults = oDoc.findAll(oSearchDesc)

 If NOT IsNull(oResults) Then
    For i = 0 To oResults.getCount() - 1 Step 1
      oResults.getByIndex(i).CharHeight = 15.0
    Next
 End If
End Sub

置換 Edit

置換はメソッドで行う場合には replaceAll メソッドによる一度にすべて置換してしまいます。一つずつ条件判断が必要であれば、上記の一つずつの検索を行いながら置換してください。

Sub Replace_1
 Dim oDoc As Object
 Dim oReplaceDes As Object

 oDoc = ThisComponent
 oReplaceDesc = oDoc.createReplaceDescriptor()
 With oReplaceDesc
   .SearchString = "found"
   .ReplaceString = "replaced"
 End With
 
 oDoc.replaceAll(oReplaceDesc)
End Sub

Calc での置換も参照。

範囲内の検索 Edit

Writer のあるテキスト範囲内を検索したいときにはテキスト範囲の比較で範囲が特定の範囲内にあるかどうかを調べます。

このとき、findNext などのメソッドは本文以外のヘッダやフッタ内にも一致してしまいます。検索結果の所属するテキスト XText インターフェースを検索したいテキストと同じかどうかを比較する必要があります。

oText = ThisComponent.getText()
'.... 検索
If EqualUnoObjects( oText, oFound.getText() Then
  '同じテキスト範囲にあるもの
  
End If

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes