Verfasst am 26.02.2008 22:55:04 Uhr Funktionierende Starbasic-Makros für Staroffice7.Product Update1 Teil1 Soeben habe ich bei dannenhoefer.de gelesen, dass sich mit einer Umstellung von Version 5.2 auf Version 6.0 gravierende Änderungen in den Eigenschaften und Methoden von StarBasic ergeben haben, die nicht ausreichend dokumentiert sind. Da habe ich mal eine Abfrage an mein Staroffice mit dem Ziel gestartet, die Version von StarBasic zu ermitteln. Leider soll dieser nichtfunktionierende Code nur die Spracheinstellung herausposaunen (Lit.»), ja aber welche Sprache? Die vom Benutzer, dem Browser, gar die "StarOffice Basic language" (Lit.»): Dim oParameter(0) As New com.sun.star.beans.PropertyValue sProvider = "com.sun.star.configuration.ConfigurationProvider" oConfigProvider = createUnoService(sProvider) OSprachversion=oConfigProvider.Locale.Language msgbox OSprachversion ... und funktioniert wegen unbekannter Methode nicht. Sehr ausführlich sind dort einige nichtflüchtige Fehler dokumentiert. Ebensowenig wollte der in dem Handbuch angegebene Code funktionieren. Bereits bei der Abfrage nach dem ersten Datenblatt Doc.Sheets(0) als auch nach dem mit "MySheet" benannten Datenblatt ergaben sich die Fehler wegen unbekannter Eigenschaften und Methoden (vergleiche hierzu Nachtrag2). Dim Doc As Object Dim Sheet As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) ... oder Dim Doc As Object Dim Sheet As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets.getByName("MySheet") Mein englischsprachiger Freund dachte, ich hätte mich vertippt ("MyShit")? Immerhin funktionierte die StarBasic-Abfrage nach dem Betriebssystem (Lit.»): Sub ShowBS OS = GetGUIType() if OS = 1 then Msgbox "BS ist Windows" if OS = 3 then Msgbox "BS ist Mac" if OS = 4 then Msgbox "BS ist Unix" End Sub Halali.... P.S.: Wird nicht gerade die Version 8 gratis verteilt? Oder ist da noch wieder ein Unterschied zwischen Staroffice8 und Starbasic8? Später mehr oder weniger. (dp) (3h) Nachtrag_1 am 27.2.2008 um 18.10Uhr: Wieder eine funktionierende Prozedur von mir (nach einer "Propierties"-tippfehlerkorrigierten Idee von Lit.»): Sub ListeEigenschaften Dim Obj As Object Dim ObjText As String Obj = createUnoService("com.sun.star.sheet.SpreadsheetDocument") ObjText = Obj.DBG_Properties MsgBox ObjText End Sub Anm.: für "com.sun.star.sheet.SpreadsheetDocument" könne man auch andere bekannte vollständige Dienstebezeichnungen eintragen, die von der Modul-Funktion createUnoService() initialisiert werden. Später (s.Beitrag v.03.3.2008) werde ich diese Art von Prozedur etwas modernisieren, da die MsgBox für manche Ausgaben zu klein dimensioniert ist und z.B. bei folgender Prozedur leider nur einen Teil der Information sichtbar macht (Schlüsselerlebnis!):(Lit.»): Sub ListeMethoden Dim Obj As Object Dim ObjText As String Obj = createUnoService("com.sun.star.sheet.SpreadsheetDocument") ObjText = Obj.DBG_methods MsgBox ObjText End Sub Anm.: s.oben (dp) (0,5h) Nachtrag_2 am 02.03.2008 um 16Uhr: Obiger Code zur Namensausgabe der Datenblätter war unvollständig. In der starbasicfaq.de-Seite steht der Code vollständig. Sub ShowDatenblattName Dim myDoc As Object myDoc = thisComponent Anzahl=myDoc.Sheets.count For i=0 to Anzahl-1 mySheet = myDoc.Sheets(i) msgbox mysheet.name Next i End Sub Es muss wohl seine Bewandnis damit haben, dass die Bezeichner nicht Doc, sondern oDoc oder myDoc oder anders heissen. Wichtig ist wohl auch thisComponent, falls es sich um das gerade geöffnete Dokument handelt. Die Bezeichnung StarDesktop.CurrentComponentlässt ähnliche Bedeutung vermuten, ist mir aber noch unklar. Vielleicht war diese Bezeichnung bei einer älteren StarBasic-Version gültig? Anhand der Datenblatt-Namensausgabe wird ersichtlich, dass das "underline"-Zeichen am Wortanfang ungünstig steht. Hier gibt die Messagebox (msgbox) den vollständigen Namen aus, jedoch in Starofffice unter dem Menüpunkt "Extras / Makros / Makro" im Formularfenster "Makros aus" wird der einleitende Unterstrich weggelassen. In der Basic-Sprache bedeutet der Unterstrich meist ein Zeilen-Fortsetzungszeichen. Die Zeile wird nicht fortgesetzt, wenn das Underline-Zeichen nicht durch ein Leerzeichen vom Codewort getrennt ihm folgt. Wieder etwas dazugelernt. Warum nicht gleich so? (dp) (0,5h) Nachtrag_3 am 03.03.2008 um 23Uhr: Soeben habe ich etwas entdeckt, was gleich nach vorne in meine Basic-Lehr- und Entwicklerseite gehört:
(dp) (0,75h) Linksammler:
Fortsetzung folgt archiviert (tbid1973.376): (dp) 16.06.2009 (+0,1h (+flagcounter +home.icon +w3c_LiCh)) | ||