
ich habe eine Frage bezüglich der Makroprogrammierung in LibreOffice Writer. Ich möchte gerne in einem zuvor vom User markierten Bereich nach verschiedenen Strings suchen und diese anschließend ersetzen (Suchen & Ersetzen).
Das Suchen & Ersetzen mithilfe eines Makros ist kein großes Ding - Probleme habe ich jedoch bei der Umsetzung, dass nur in einem bestimmten Bereich gesucht werden soll.
Im Calc funktioniert das relativ schmerzlos mit:
Code: Alles auswählen
Sub Suchen_Ersetzen
aRange = ThisComponent.getCurrentSelection()
sSuchen = aRange.createReplaceDescriptor
sSuchen.setSearchString("\")
sSuchen.setReplaceString("/")
arange.replaceAll(sSuchen)
End Sub
Nächster Versuch war folgendes - aus dem Forum geklaut:
Code: Alles auswählen
Sub Replace2()
Dim oDoc,oText,oVC,oStart,oEnd,oFind,FandR
oDoc = ThisComponent : oText = oDoc.Text
oVC = oDoc.CurrentController.getViewCursor
aFind = Array("1", "2","3" ,"4", "5" ,"6" ,"7", "8", "9", "0")
aReplace = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j")
aRayCount = 0
While aRayCount <= uBound(aFind)
oStart = oText.createTextCursorByRange(oVC.Start)
If Not oVC.isCollapsed then oEnd = oText.createTextCursorByRange(oVC.End)
FandR = oDoc.createReplaceDescriptor
With FandR
.SearchString = aFind(aRayCount)
.ReplaceString = aReplace(aRayCount)
.SearchWords = false
End With
If isEmpty(oEnd) then 'Do whole document.
oDoc.replaceAll(FandR)
Else 'Do selection.
Do
On Error Resume Next
oFind = oDoc.FindNext(oStart.End,FandR)
If isNull(oFind) then Exit Do
If oText.compareRegionEnds(oFind,oEnd) < 0 then Exit Do
oFind.setString(FandR.ReplaceString)
oFind = oDoc.FindNext(oFind.End,FandR)
Loop
EndIf
aRayCount = aRayCount + 1
Wend
End Sub
Nun aber zum Problem: ich erstelle ein neues Dokument und füge den Text "Das issst ein Text". Darunter erstelle ich eine Tabelle und füge in die Zelle ebenfalls den Text "Das issst ein Text" ein.
Markiere ich nun den ersten Text und lasse durch das Makro " issst" durch "ist" ersetzen, so wird auch der Text in der Tabelle geändert. Woran liegt dies und wie kann ich dies umgehen?
Lg