Seite 1 von 1
Schnittstelle (Interface) ansprechen
Verfasst: Di, 25.05.2004 12:01
von Wolfgang Lampert
Hi, ich versuche, das mittlere Beispiel aus dem SO Programmierhandbuch, Seite 74, nachzubilden. Leider fehlt mir noch Einiges - ich komme alleine nicht darauf, wie der Service "com.sun.star.container.XNameAccess" zu initialisieren ist:
REM Ausgabe aller Tabellen-Namen eines Tabellen-Dokumentes
Sub Test
Dim Sheets As Object
Dim SheetNames
Dim I As Integer
Sheets = Spreadsheet.Sheets
SheetNames = Sheets.getElementNames
For I=LBound(SheetNames) to UBound(SheetNames
Msgbox SheetNames(I)
Next I
End Sub
Verfasst: Di, 25.05.2004 18:09
von Toxitom
Hallo Wolfgang,
Die Beispiele sind nur Codeschnipsel und nicht immer für sich lauffähig. Wesentlich ist, dass du verstehst, worum es geht.
Dein Beispiel ist deswegen nicht lauffähig, weil das Objekt "Spreadsheet" nicht definiert wurde. Füge vor die Zeile Sheets noch dein Dokumentenobjekt ein, nenne diese eben "Spreadsheet" , dann funktioniert es:
Code: Alles auswählen
REM Ausgabe aller Tabellen-Namen eines Tabellen-Dokumentes
Sub Test
Dim Spreadsheet as Object
Dim Sheets As Object
Dim SheetNames
Dim I As Integer
Spreadsheet = thisComponent
Sheets = Spreadsheet.Sheets
SheetNames = Sheets.getElementNames
For I=LBound(SheetNames) to UBound(SheetNames
Msgbox SheetNames(I)
Next I
End Sub
Viele Grüsse
Thomas
Verfasst: Mi, 26.05.2004 11:13
von Wolfgang Lampert
Hi, danke für die Ergänzung.
Funktioniert so natürlich. Allerdings hat es mich einige Zeit gebraucht um zu verstehen, dass "Sheets" mit zwei vollkommen unterschiedlichen Bedeutungen in einer Zeile verwendet wird:
Sheets=Spreadsheet.Sheets
Bei "Sheets=.." handelt es sich um eine frei definierte ObjektVariable
Bei ".Sheets" um ein Schlüsselwort !!
Sinnvoller wäre:
Dim oSheet as Object
..
oSheet = Spreadsheet.Sheets
gruss Wolfgang
Verfasst: Mi, 26.05.2004 12:14
von Toxitom
Hallo Wolfgang,
wo du recht hast, hast du recht. Das wäre natürlich sinnvoller.
Bei ".Sheets" um ein Schlüsselwort !!
"Schlüsselwort " ist wohl nicht ganz richtig, es handelt sich um eine vordefinierte Funktion (eben mit mit Namen "Sheets"), die allerdings nur bei Tabellendokumenten vorhanden ist, und ein Objekt zurückliefert.
Dieses Objekt kann natürlich den gleichen Namen tragen ("sheets"), auch wenn dies nicht so geschickt ist.
Gruss
Thomas
Verfasst: Mi, 26.05.2004 15:02
von Wolfgang Lampert
Hi, danke nochmals an alle für die tolle Unterstützung. Kenne das so und in dieser Qualität nicht!! Ich arbeite im Moment an der Umstellung von MS Office nach OO und ohne diese Hinweise wäre es nicht so gut möglich.
Bestimmt kann ich mich in relativ kurzer Zeit ebenso nützlich machen.
Noch ein kleiner Hinweis - bitte Korrektur, wenn ich falsch liege:
Spreadsheet = thisComponent
--> die "calc-Datei" bzw. das aktuelle modul der StarOffice-Anwendung
"Spreadsheet=thisComponent" bezieht sich auf das Spreadsheet, IN DEM DAS MAKRO HINTERLEGT IST. Wenn ich das Makro nun von einem anderen Spreadsheet aus aufrufe, untersucht es die falsche Anwendung.
"Spreadsheet=StarDesktop.CurrentComponent" ist daher sinnvoller und grundsätzlich zu bevorzugen
gruss Wolf