Aktuelle TextTable als TextRange abrufen und damit suchen
Verfasst: Do, 10.06.2010 16:01
Aufgabe allgemein: Mehrere Text-Dokumente sollen mit OOo Basic bearbeitet werden. Jedes Dokument besteht aus "Abschnitten" (das ist nur meine logische Gliederung und hat nichts mit OOo-Objekten zu tun); jeder Abschnitt enthält 2 Absätze und 1 TextTable (jeweils 1 Spalte und 5 bis 20 Zeilen). Das zur Erläuterung für die Situation.
Aufgabe konkret: Wie frage ich (ausgehend von der aktuellen Cursor-Position) ab, innerhalb welcher TextTable ich mich befinde, damit diese TextTable vollständig ausgewählt wird und als TextRange für eine Textsuche vorgegeben wird.
Bisherige Teillösungen und Abläufe:
1. Folgende Variable sind vorbereitet:
2. Mit searchStudent suche ich den Textinhalt im zweiten Absatz eines jeden Abschnitts:
3. Dann markiere ich den Treffer, gehe in den nächsten Absatz und will mich damit in die erste Zelle der dazugehörigen TextTable bewegen (aber deren Name ist mir nicht bekannt). Wenn ich es manuell im Editor so mache, dann lande ich tatsächlich innerhalb der TextTable. Aber per Makro-Code komme ich nicht in die TextTable hinein, sondern lande am Anfang des nächsten Abschnitts.
Frage 3. Mit welchem TextCursor.GoXxx-Befehl komme ich in die unmittelbar folgende TextTable hinein?
4. Jetzt will ich innerhalb dieser TextTable (also beschränkt auf die aktuelle TextTable) einen bestimmten Text suchen:
Ich brauche also die Festlegung, dass searchObject nur innerhalb eines bestimmten Bereichs suchen soll. Also fehlen im Punkt 4 diese Schritte:
Frage 4.1. Mit welcher Eigenschaft wird die Suche auf einen bestimmten TextRange beschränkt? Irgendwo hatte ich so etwas schon gelesen, aber ich finde dies nicht mehr.
Frage 4.2. Wie bekomme ich die aktuelle TextTable gemäß Punkt 3 als Objekt vom Typ TextRange? Alle Beispiele, die ich dazu finde, gehen über den Index oder über den Namen der Tabelle. Beides steht mir bei diesem Arbeitsablauf nicht zur Verfügung. Aber es muss doch etwas wie currentTable geben...
Mit dem DispatchHelper kann ich die aktuelle TextTable markieren (wahlweise mit EntireColumn oder mit SelectTable), aber was hilft mir das beim searchObject?
Danke für Lösungsvorschläge! Jürgen
// Edit
PS 1. Eine Erklärung für das Problem mit Punkt 3 habe ich inzwischen gelesen, aber noch keine Lösung: OOo unterscheidet zwischen Paragraph und TextTable. Aber dennoch muss es doch möglich sein, den TextCursor in die "richtige" TextTable zu setzen oder ersatzweise wenigstens einen neuen TextCursor auf die zugehörige TextTable zu bekommen.
PS 2. Wenn ich die TextTables nicht durchnummeriert hätte, sondern mit einem Namen versehen hätte, wäre die ganze Suche wahrscheinlich viel einfacher geworden. Das kann ich bei den Zeugnissen im nächsten Jahr machen, aber jetzt habe ich keine Zeit dafür, alle Vorlagen nochmals neu zu erstellen.
Aufgabe konkret: Wie frage ich (ausgehend von der aktuellen Cursor-Position) ab, innerhalb welcher TextTable ich mich befinde, damit diese TextTable vollständig ausgewählt wird und als TextRange für eine Textsuche vorgegeben wird.
Bisherige Teillösungen und Abläufe:
1. Folgende Variable sind vorbereitet:
Code: Alles auswählen
rem ** Variable für die Zieldatei
'destDoc ist das eigentliche Dokument
'destCursor ist der TextCursor
'zwei Suchverfahren
searchStudent = destDoc.createSearchDescriptor
searchObject = destDoc.createSearchDescriptor
Code: Alles auswählen
destCursor.gotoStart(false)
searchStudent.searchString = schueler
found = destDoc.findFirst(SearchStudent)
Code: Alles auswählen
destCursor.gotoRange(found, false)
destCursor.gotoNextParagraph(false)
' oder alternativ auch:
destCursor.goRight(1, false)
4. Jetzt will ich innerhalb dieser TextTable (also beschränkt auf die aktuelle TextTable) einen bestimmten Text suchen:
Code: Alles auswählen
searchObject.searchString = fach
found = destDoc.findFirst(searchObject)
Frage 4.1. Mit welcher Eigenschaft wird die Suche auf einen bestimmten TextRange beschränkt? Irgendwo hatte ich so etwas schon gelesen, aber ich finde dies nicht mehr.
Frage 4.2. Wie bekomme ich die aktuelle TextTable gemäß Punkt 3 als Objekt vom Typ TextRange? Alle Beispiele, die ich dazu finde, gehen über den Index oder über den Namen der Tabelle. Beides steht mir bei diesem Arbeitsablauf nicht zur Verfügung. Aber es muss doch etwas wie currentTable geben...
Mit dem DispatchHelper kann ich die aktuelle TextTable markieren (wahlweise mit EntireColumn oder mit SelectTable), aber was hilft mir das beim searchObject?
Danke für Lösungsvorschläge! Jürgen
// Edit
PS 1. Eine Erklärung für das Problem mit Punkt 3 habe ich inzwischen gelesen, aber noch keine Lösung: OOo unterscheidet zwischen Paragraph und TextTable. Aber dennoch muss es doch möglich sein, den TextCursor in die "richtige" TextTable zu setzen oder ersatzweise wenigstens einen neuen TextCursor auf die zugehörige TextTable zu bekommen.
PS 2. Wenn ich die TextTables nicht durchnummeriert hätte, sondern mit einem Namen versehen hätte, wäre die ganze Suche wahrscheinlich viel einfacher geworden. Das kann ich bei den Zeugnissen im nächsten Jahr machen, aber jetzt habe ich keine Zeit dafür, alle Vorlagen nochmals neu zu erstellen.