*検索と置換 [#f992c688] 検索と置換はどのドキュメントタイプでも同じです。条件の設定は[[Calc での検索>OOoBasic/Calc/search]] 参照。 #contents **一つずつ検索 [#x5e8d880] 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 **全検索 [#p46cce6a] 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 **置換 [#q532737a] 置換はメソッドで行う場合には replaceAll メソッドによる一度にすべて置換してしまいます。一つずつ条件判断が必要であれば、上記の一つずつの検索を行いながら置換してください。 Sub Replace_1 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 End Sub [[Calc での置換>OOoBasic/Calc/substituent]]も参照。 **範囲内の検索 [#e3f204f4] Writer のあるテキスト範囲内を検索したいときには[[テキスト範囲の比較>OOoBasic/Writer/text#d00b2eef]]で範囲が特定の範囲内にあるかどうかを調べます。 このとき、findNext などのメソッドは本文以外のヘッダやフッタ内にも一致してしまいます。検索結果の所属するテキスト XText インターフェースを検索したいテキストと同じかどうかを比較する必要があります。 oText = ThisComponent.getText() '.... 検索 If EqualUnoObjects( oText, oFound.getText() Then '同じテキスト範囲にあるもの End If |