Top > OOoBasic > Writer > Search

*検索と置換 [#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

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