Schnittstelle (Interface) ansprechen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Schnittstelle (Interface) ansprechen

von Wolfgang Lampert » Mi, 26.05.2004 15:02

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

von Toxitom » Mi, 26.05.2004 12:14

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

von Wolfgang Lampert » Mi, 26.05.2004 11:13

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 :idea:
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

von Toxitom » Di, 25.05.2004 18:09

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

Schnittstelle (Interface) ansprechen

von Wolfgang Lampert » Di, 25.05.2004 12:01

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

Nach oben