Hallo g.lema,

deine Fehlerbeschreibung ist etwas unklar: du schreibst "markiere ich nun den ersten Text...", nennst aber als mögliche Fehlerursache die Ermittlung von Start- und Endpunkt in Tabellen, was auf den zweiten Text hindeuten würde. Ist in der Tabelle der Text merkiert oder eine oder mehrere Zellen der Tabelle? Das macht einen großen Unterschied, den du in deinem Programm behandeln musst. Im ersten Fall hat die Selektion u.a. die Objekteigenschaft "Text", im zweiten ist die Selektion ein TextTableCursor., dann geht natürlich dein Code nicht, der für Text gedacht ist. Du siehst das ganz leicht, wenn du die beiden Selektionen mit Xray anschaust. Solltest du Xray noch nicht installiert haben, dann lade das sofort herunter, du findest das über die Extensions oder auch direkt im Internet mit der Suche Marcelly + Xray. Das Tool ist Gold wert! Richte dir, wie beschrieben, eine Tastenkombination zum direkten Aufrufen ein, dann kannst du z.B. das Gewünschte selektieren und dann nach dem Aufruf von Xray den Button ThisComponent.currentSelection(0) drücken (es wird bei einer mehrteiligen Selektion nur der erste Teil gezeigt).

Gruß

Gerhard

Am 18.10.2016 um 06:23 schrieb g.l...@web.de:
Hallo :)
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 (mehrmaliges "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.
Ich hatte mir dazu aus einem Forum folgenden Source-Code rausgesucht: -------------------------------------------
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
-------------------------------------------
Den Inhalt versteh ich ohne Probleme - komme aus der Java-Ecke. In einem neuen frischen Dokument, welches nur Text beinhaltet, funktioniert das wunderbar.

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 bekomme ich eine Exception (Type: IllegalArgumentException; Message:." bei 
oText.compareRegionEnds(oFind,oEnd)).
Ursache hierfür dürfte die Start- und Endpunktermittlung bei Tabellen sein. Bei Ausführung von oText.createTextCursorByRange(oVC.End) erhalte ich auch den Laufzeitfehler "End of content node doesn´t have the proper start node". Wie wäre das Makro anzupassen, dass es auch mit Tabellen funktioniert? Lg



--
Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org
Probleme? 
http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert

Antwort per Email an