Date: prev next · Thread: first prev next last
2019 Archives by date, by thread · List index


Vielen Dank für das Interesse.

Der Hintergrund für meine Fragestellung war der Umstand, dass ich eine variable Wortzählung geschrieben hatte, mit der einstellbar ist, ob Aufzählungsbullets oder Nummerierungen gezählt werden, und welche einzeln stehenden Zeichen nicht als Wort zählen sollen, z.B. Punkte, Kommas u.ä., die als Tippfehler mit Leerzeichen davor im Text auftauchen. (Übrigens zählt LO einen Einzelgedankenstrich [8211] korrekterweise nicht als Wort, aber einen Einzelbindestrich [45] doch!)

Dazu verwende ich den Absatzcursor. Für das gesamte Dokument ist es nicht so schwierig. Ich kann das Dokumenttextobjekt enumerieren und erhalte Absätze und Tabellen. In den Tabellen kann ich über das Array der Zellnamen jede Zelle erreichen. Das ganze läuft dann über die Enumeration jedes Zelltextobjekts wiederum ab, so dass auch eingebettete Tabellen gefunden werden. Textrahmen, Fuß- und Endnoten, sowie Kopf- und Fußzeilen können auf Dokumentebene gelistet werden und wiederum über deren Textenumerationen durchsucht werden.

Um dies alles zu testen, habe ich den pfiffigen Selektionsiterator verwendet, den Andrew Pitonyak in OOME vorgestellt hat. Der hat allerdings den Nachteil, dass er nur das Dokumenttextobjekt berücksichtigt. Ich habe ihn daher modifiziert, so dass auch die Textobjekte anderer Selektionen zum Zuge kommen.

So kann ich testrelevante Textbereiche auswählen, testen und gleichzeitig über die Menüfunktion "Extras|Wortzählung" überprüfen, wie LO zählt.

Im Zusammenhang mit Selektionen in Tabellen bemerke ich allerdings ein paar Besonderheiten:

- Selektionen, die vor einer Tabelle beginnen und darüber hinaus gehen, enthalten die gesamte Tabelle. Weitere Selektionen sind möglich.

- Neben Selektionen ganzer Zellbereiche einer Tabelle sind keine weiteren Selektionen möglich.

- Neben Selektionen von Zellinhalten sind weitere Selektionen möglich.

- Selektionen von ganzen Zellbereichen einer Tabelle unterstützen den Service "com.sun.star.text.TextTableCursor". In diesem Fall gibt es keine Methode "getCount"!

- Alle anderen Selektionen unterstützen den Service "com.sun.star.text.TextRanges", auch Selektionen in Textrahmen, Fußnoten u.a.

- Interessanterweise gehört eine Selektion von Tabellenzellen, die mit einer Zelle beginnt, in der Absätze mit Listen oder Nummerierungen sind (nicht einmal zwingend im ersten Absatz), zu den TextRanges. Sehr seltsam.

Um auf die einzelnen Zellen eines selektierten Tabellenzellbereichs zuzugreifen, könnte man den String RangeName parsen, was aber nur für einfache Tabellenstrukturen möglich wäre. Für komplexe Tabellen funktioniert das nicht. Eine Konversion des Cursors in einen CellRange ist bei komplexen Tabellen leider fehlerhaft.

Ich helfe mir damit, dass ich stattdessen je nach Laune entweder alle Zellen der Tabelle durchsuche oder gar keine.

Ein weiteres Problem habe ich auch noch nicht gelöst. Es kann vorkommen, dass in einer einzelnen Selektion über mehrere Absätze hinweg ein am Absatz verankerter Textrahmen komplett mit ausgewählt ist. Mein Versuch mit

oEnum = oSel.createContentEnumeration("com.sun.star.text.TextFrame")

endet in einem undifferenzierten Laufzeitfehler. Wenn ich dieses Problem, nämlich ein Textrahmentextobjekt innerhalb einer Selektion zu instantiieren, nicht lösen kann, werde ich es gesondert posten. (Es sei denn, ihr habt eine schnelle Lösung.)

Schöne Grüße
Volker

Am 21.05.19 um 07:36 schrieb Thomas Krumbein:
Hallo Volker, Gerhard,

ich klinke mich mal kurz ein. Writer-Tabellen sind nicht ganz so einfach zu verstehen. Auch wenn viele der typischen Tabellen-Methoden vorhanden sind und intern korrekt ausgefüllt werden, ist der umgekehrte Weg (also über die Eigenschaften / Methoden) auf z.B. selektierte Zellen zu kommen, nicht möglich.

Wir hatten gerade im Forum einen sehr ähnlichen Fall diskutiert - vielleicht hilft Dir das ein wenig weiter:

https://de.openoffice.info/viewtopic.php?f=18&t=72202

So ähnlich wirst Du auch vorgehen müssen...


--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.