ich versuche gerade, eine Suche nach Formaten in Writer mit Basic-API Methoden nachzustellen und komme leider nicht weiter.
Hintergrund:
In Writer ist es möglich, eine "Suchen & Ersetzen" Anfrage zu starten und bestimmte Formate (in dem Fall spezielle Zeichenformatierungen - nämlich "Hervorhebungen") zu suchen und durch andere Formatierungen zu ersetzen.
Diese Möglichkeit versuche ich nun mit Basic umzusetzen. Bisher finde ich lediglich die Möglichkeit, im com.sun.star.util.SearchDescriptor Objekt die Eigenschaft "SearchStyles" auf True zu setzen und entsprechend den Absatz-Format Namen im Searchstring zu platzieren.
Nicht das, was ich suche.
Per Makro-Rekorder kann ich zwar den passenden Dispatcher-Code aufzeichnen, der sieht dann wie folgt aus (Ausschnitt):
Code: Alles auswählen
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(21) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.SearchFiltered"
args1(4).Value = false
args1(5).Name = "SearchItem.Backward"
args1(5).Value = false
args1(6).Name = "SearchItem.Pattern"
args1(6).Value = false
args1(7).Name = "SearchItem.Content"
args1(7).Value = false
args1(8).Name = "SearchItem.AsianOptions"
args1(8).Value = false
args1(9).Name = "SearchItem.AlgorithmType"
args1(9).Value = 1
args1(10).Name = "SearchItem.SearchFlags"
args1(10).Value = 65536
args1(11).Name = "SearchItem.SearchString"
args1(11).Value = ""
args1(12).Name = "SearchItem.ReplaceString"
args1(12).Value = ""
args1(13).Name = "SearchItem.Locale"
args1(13).Value = 255
args1(14).Name = "SearchItem.ChangedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.DeletedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.InsertedChars"
args1(16).Value = 2
args1(17).Name = "SearchItem.TransliterateFlags"
args1(17).Value = 1073743104
args1(18).Name = "SearchItem.Command"
args1(18).Value = 1
args1(19).Name = "SearchItem.SearchFormatted"
args1(19).Value = false
args1(20).Name = "SearchItem.AlgorithmType2"
args1(20).Value = 2
args1(21).Name = "Quiet"
args1(21).Value = true
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
Leider Fehlen mir dazu die richtigen Einstiegspunkte.
Ich schätze mal, die beiden Dispatcher-Eigenschaften "SearchItem.SearchFlags" und "SearchItem.TransliterateFlags" müssten der Schlüssel zum Ergebnis sein, leider kann ich keine entsprechenden Hinweise in der API Referenz auf diese Werte und evt. Ausprägungen finden.
Vielleicht hat jemand eine Idee?
Das Ziel:
Ein beliebiger Writer-Text wurde von einem Benutzer mit Hilfe des Icons "Farbe für Hervorhebungen" an beliebigen Stellen markiert. Faktisch wird dabei lediglich die Hintergrundfarbe des Zeichens verändert. Das Makro nun soll alle diesen Stellen die "harte" Formatierung entfernen und durch eine Zeichenformat-Vorlage ersetzen.
Theoretisch wäre zwar eine Iteration über alle Zeichen des Textes möglich, bei einer Datei mit mehreren hundert Seiten Text jedoch überhaupt nicht mehr perform. Die bereits eingebaute Suchroutine hingegen ist sehr perform und mit der Möglichkeit, alle Stellen "in einem Rutsch" zu bearbeiten perfekt.
Für sachdienliche Hinweise bin ich sehr dankbar.
Viele Grüße
Tom