Alles gesammelt
Alles gesammelt UNO fasst gleichartige Objekte zu Collections zusammen, die den Auflistungen in Microsoft Office entsprechen. So bilden die Tabellen (Sheets) eines Tabellendokuments genauso eine Collection wie die Absätze eines Textdokuments. Je nach Typ der Collection gibt es verschiedene Mögli...
Alles gesammelt
UNO fasst gleichartige Objekte zu Collections zusammen, die den Auflistungen in Microsoft Office entsprechen. So bilden die Tabellen (Sheets) eines Tabellendokuments genauso eine Collection wie die Absätze eines Textdokuments. Je nach Typ der Collection gibt es verschiedene Möglichkeiten, auf ihre einzelnen Elemente zuzugreifen.
Bei benannten Collections wie Sheets besitzt jedes Element einen individuellen Namen, über den man es mit Hilfe der getByName-Methode ansprechen kann. Das folgende Beispiel speichert einen Verweis auf die Tabelle Tabelle1 in der Objektvariablen objTabelle und weist deren Eigenschaft isVisible anschließend den Wert False zu, um die Tabelle unsichtbar zu machen (was sich durch eine Zuweisung von True ganz leicht wieder rückgängig machen lässt):
Die Methode getElementNames, über die jede benannte Collection verfügt, liefert die Namen aller Elemente als Array zurück. Das macht es einfach, eine Collection per Schleife zu durchlaufen. Das nächste Beispiel arbeitet sich per For-Next-Schleife durch das Variant-Array vntNamen(). Es enthält die Namen aller Tabellen, die der MsgBox-Befehl verkündet:
Dim vntNamen() As VariantDim intI As IntegervntNamen() = objTabellen _.getElementNamesFor intI = LBound(vntNamen) To _UBound(vntNamen)MsgBox vntNamen(intI)Next
Um feststellen zu können, ob ein bestimmtes Element in einer benannten Collection enthalten ist, benötigt man keine Schleife, da man sich die gewünschte Info ganz einfach per hasByName-Methode beschaffen kann. Das folgende Beispiel prüft das Vorhandensein der Tabelle Tabelle1 und zeigt das Ergebnis (True oder False) an:
MsgBox objTabellen.hasByName("Tabelle1")
Die Elemente der meisten Collections verfügen nicht nur über einen eindeutigen Namen, sondern auch über eine ebensolche Indexzahl, die die Position des Elements innerhalb der Collection angibt. Im Gegensatz zu VBA-Auflistungen beginnt die Collection-interne Zählung aber immer bei Null. Den Zugriff auf ein bestimmtes Element gewährt die getByIndex-Methode, der man die Indexzahl des gewünschten Elements übergeben muss.
objTabelle = objTabellen.getByIndex(1)
liefert einen Verweis auf die zweite (!) Tabelle des aktuellen Calc-Dokuments und speichert ihn in objTabelle. Alternativ ermöglicht OpenOffice einen verkürzten Zugriff auf ein indiziertes Element, der ohne die getByIndex-Methode auskommt:
objTabelle = objTabellen(1)
Wer die Indexzahlen zum Durchlaufen einer Collection verwendet, kann auf die Dienste der getElementNames-Methode verzichten. Das zeigt das folgende Beispiel, das ein weiteres Mal die Namen aller Tabellen anzeigt. Dazu arbeitet sich eine For-Next-Schleife durch sämtliche Elemente, deren Anzahl in der getCount- Eigenschaft der Collection abrufbar ist:
For intI = 0 To objTabellen _.getCount - 1MsgBox objTabellen(intI).NameNext
Weiterführende Literatur
[1] Thomas Krumbein, Makros Makros in OpenOffice.org 3 von Thomas Krumbein, ISBN 3-8362-1438-5, 44,90 Euro, Galileo Press 2007[2] API-Referenz online: https://api.openoffice.org/docs/common/ref/com/sun/star/module-ix.html[3] Developer's Guide online: https://wiki.services.openoffice.org/wiki/Documentation/DevGuide/OpenOffice.org_Developers_Guide[4] Download des Developer's Guide als PDF-Datei: https://api.openoffice.org/docs/DevelopersGuide/DevelopersGuide.pdf