REFERAT-MenüDeutschGeographieGeschichteChemieBiographienElektronik
 EnglischEpochenFranzösischBiologieInformatikItalienisch
 KunstLateinLiteraturMathematikMusikPhilosophie
 PhysikPolitikPsychologieRechtSonstigeSpanisch
 SportTechnikWirtschaftWirtschaftskunde  



Scripts in Lotus

Scripts in Lotus 1-2-3




*  Einleitung



*  Scripterstellung





*  Dialogeditor



*  Script-Befehle



*  Verschiedene Vorgangsweisen



*  Komplexes Beispiel



*  Quellen






Einleitung:

LotusScript ist eine strukturierte Programmiersprache mit der man Aufgaben in 1-2-3 automatisieren kann. Scripts sind kurze, objekt-orientierte Programme, die in der Kalkulations-Umgebung von Lotus 1-2-3 laufen. Sie sind erst ab der 97er Version in Lotus 1-2-3 verfügbar.

Da LotusScript dieselbe Entwicklungsumgebung wie andere SmartSuite Anwendungen und Lotus Notes verwendet, kann man Scripts in 1-2-3 und produktübergreifend in anderen Anwendungen wie Freelance Graphics, Word Pro und Lotus Notes erstellen, austesten und ausführen. Weiters ist Lotus Script mit Visual Basic kompatibel, und daher auch relativ einfach zu erlernen.


Abb. 1

  Text Box:  Scripterstellung:

Scripterstellung durch Aufzeichnen

Wie bei einem Makro wird hier jeder Tastendruck und jede Aktion mitgeschrieben. (Auf diese Art und Weise erhält man auch Aufschluß darüber, wie die einzelnen Programmierbefehle lauten, wenn man sich nicht der Mühe unterziehen will, die Hilfe zu durchsuchen). Nach dem Start muß man einen Namen für das Script eingeben und das Verzeichnis, in dem das Script gespeichert werden soll. Weiters werden 2 kleine Icons eingeblendet (=> Abb.1), mit denen man die Aufzeichnung jederzeit pausieren und stoppen kann. Das Script wird dann als globales Script unter dem angegebenen Namen abgelegt.

Scripterstellung im Scripteditor

Mit dem Scripteditor (=> Abb.3) lassen sich Scripts direkt schreiben - vorausgesetzt man kennt die diversen Programierbefehle.

Der Scripteditor ("Bearbeiten/LotusScript Makros/ScriptEditor anzeigen") gliedert sich in mehrere Bereiche.


Bindung von Scripts an Objekte:


Scripts können

a) an das Programm Lotus 123 selbst gebunden und auf bestimmte Aktionen hin gestartet werden

b) an ein bestimmtes Arbeitsblatt gebunden werden. Solche Scripts können dann mit Öffnen des Files gestartet werden,

z.B.:  Sub Opened(Source As Document)

Dialog1.show

End sub


c) an ein bestimmtes Arbeitsblatt als globale Scripts gebunden werden (z.B. Zins.123).

z.B.: Sub Eingabe

Dialog1.show

End Sub


Derartige globale Scripts können dann über ("Bearbeiten/LotusScript Makros/Ausführen Alt+F3") gestartet werden oder überhaupt ins Menü integriert werden und zusätzlich über eine Tastenkombination abrufbar sein. (es gibt dann den Menüpunkt "Aktionen"). Dazu ist es erforderlich entsprechende Optionen für globale Scripts zu setzen. Diese sind erreichbar unter "Bearbeiten/LotusScript Makros/Optionen für globale Scripts". =>Abb. 2

Abb. 2

 
Beachte: Im Unterschied zu anderen Scripts wird bei globalen Scripts der Name des Scripts (hier: "Eingabe) durch den Programmierer angegeben


d) an eine bestimmte Zelle bzw. an einen bestimmten Bereich gebunden werden

e)     über einen Button gestartet werden

Dialogerstellung


Ahnlich wie in Delphi kann in Lotus "visuell" programmiert werden. Dabei steht als Grundobjekt eine Dialogkomponente zur Verfügung in die dann weitere Komponenten eingebettet werden. Alle diese Komponenten haben diverse Eigenschaften und es können für sie Scripts erstellt werden, die diese Komponenten ausführen, wenn sie auf ein bestimmtes Ereignis reagieren.




Werkzeugleiste: (Toolbox)


Pointer .    Frame

Label . Textbox

CommandButton .... Image

Checkbox OptionButton

ListBox ...... Combobox

Spinbutton ..... Progressbar

Slider

Abb. 3

 


Bei allen Dialogelementen kommt man über die rechte Maustaste zu den Properties

(=>Abb. 5) Dazu gehören Name, Caption, Größe, Schrift, usw. Mit einem Doppelklick auf die Komponente gelangt man in den Scripteditor, um zum Standardereignis das entsprechende Script zu schreiben.


Wichtige Eigenschaften (Properties) von Dialogelementen

  • caption: Inhalt                        
  • name: Name
  • visible: Sichtbarkeit
  • enabled: zeigt an, ob ein Objekt ansprechbar ist (true/false)

Wichtige Methoden:

  • SetFocus: Fenster wird aktiviert

Wichtige Ereignisse (Events):

  • Change: löst bei jeder Veränderung Ereignis aus(z.B. beim Slider, Combobox)

Click: bei Mausklick

  • DblClick: bei Doppelklick
  • Gotfocus: wenn ein Fenster aktiviert wird
  • Keypress: bei Tastendruck
  • Initialize: bei Erstellung (Dialog) oder beim Laden (Objekt)

Spezielle Dialogelemente


Dialog:                 Methoden show: öffnet den Dialog

Methode close: schließt den Dialog

Ereignis load: Ladet (öffnet) den Dialog

Label: Eigenschaft caption: Inhalt des Labels ist vom Typ string

Textbox:   Eigenschaft text: Inhalt der Textbox, ist vom Typ string

OptionButton/ Eigenschaft value: gibt an, ob Element ausgewählt ist oder nicht

Checkbox: 0 oder false: nicht ausgewählt

Listbox/    1 oder true: ausgewählt

Combobox: 2 oder greyed: keine Auswahl möglich

Bei properties können im rechten Ordner die einzelnen Elemente eingegeben werden (zur Entwurfszeit).

Eigenschaft list: enthält die einzelnen Elemente,

(dialog1.combo1.list(1) liefert das 2. Element)

Methode additem: fügt ein Element hinzu, Standardereignis: Pick!!

Slider: Eingeschaft value: liefert die Position des Schiebereglers als integer



Beispiel: Eingabedialog

Zuerst werden die Dialogkomponente (Dialog 1), die

Labelkomponenten (Label1-3), die Textboxkomponenten (Text1-3) und die Command-Button-Komponenten (Command1-2) erstellt. (Properties (=>Abb. 4) werden über rechte Maustaste aufgerufen)

Anschließend werden die entsprechenden Scripts geschrieben Der Script-Editor kann über die rechte Maustaste (View Scripts), durch den Menüpunkt "View/Show Scripts" oder durch Doppelklick auf eine Komponente gestartet werden.

Das Script für den OK-Button könnte dann z.B. so wie in der Abb. 6 aussehen.

Alle Inhalte, die an Zellen zugewiesen werden, sollten vorher in einen String konvertiert werden (mit dem Befehl Cstr() ). Da aber Caption ohnehin einen Text beinhaltet, kann diese Konvertierung hier auch entfallen. Zellinhalte werden mit [Zelle].Contents oder [Zellname].Contents angesprochen. Um mit dem Button "Cancel" den Dialog abzubrechen eignet sich folgendes Script:


Sub Click (Source Asotuscommandbutton)

Source.Parent.Close (oder dialog1.close)

End Sub


Beispiel: Checkbox, Slider und Combobox (=> Abb.5)


Sub Click(Source As Lotusoptionbutton)

[B3].contents = '100000'

End Sub   (bzw. 250000 und 750000)


Sub Click(Source As Lotusslider)

[B4].contents = Cstr(Dialog2.slider1.value)

End Sub


Sub Pick(Source As Lotuscombobox, Index As Integer)

[B5].contents = Cstr(Dialog2.combo1.text)

End Sub


Initialisierungsscript:

Sub Load(Source As Lotusdialog)

Dialog2.Slider1.value = Cint([B4].contents)

Dialog2.combo1.caption = Cstr([B5].contents)

End Sub


Scripteditor:

(Integrated Development Environment)

















Abb. 6

 


Die wichtigsten Scriptbefehle und Vorgangsweisen:


Programmierbefehle:


Grundsätzliche Variablenoperationen

Dim Name as Typ             Dient der Definition einer Variable

Bsp.: Dim zahl as integer

Set Dient der Belegung einer Variable

Bsp.: set wort = cstr(12)



Variable mit Zelle innerhalb eines Ranges belegen:

Dim zelle as variant

Set zelle= bereich.cell (reihe,spalte)

Beachte: Spalte und Reihe beginnen jeweils bei null. (z.B.:Reihe 3 und Spalte B => bereich.cell(2,1)


Verschiedene Schleifenformen

If then Bei einzeiliger Verzweigung kann das End if entfallen


else


End if


While [condition]            

[statements]

W end


Do [While Until condition]

[statements]

Loop


Do

[statements]

Loop[While Until condition]


Befehle für den Zugriff auf Zellen

Cellvalue                          Liefert den Wert einer Zelle, gelieferter Wert kann von verschiedenem Typ sein

[A1].cellvalue

contents    Liefert den Inhalt einer Zelle, immer vom Typ string

[A1].contents

Beachte: Wenn in einer Zelle eine Formel steht, liefert der Befehl contents nicht den Inhalt der Zelle, sondern die Formel. Abhilfe => Befehl cellvalue


select   Wählt eine Zelle oder einen Bereich aus

[A1].select

set bereich = bind(bereichsgrenzen) Belegt die Variable bereich (muß vom Typ range sein); bereichsgrenzen ist vom Typ string, z.B.:"A10..C20". Es kann auch nur eine Zelle als Bereich zugewiesen werden!

Set endzelle=bind(endzelladr)


Datentypen in Lotus

Currency                           Währung

Data                                  Datum, Zeit

Double, single                  reele Zahlen

Integer, long                     Integerzahlen (Slider

String                                Zeichenkette (Textfelder, Labelfelder, Zellen ( =>können aber auch integer sein!!), )

Variant             alle einfache Datentypen, array, Objekte



Der Datentyp Variant stellt einen Container für beliebige Daten dar. Lotus legt den Typ bei Zuweisung anhand des Wertes fest. Da Lotus keinen Datentyp für Datum oder Zeit aufweist, wird hier der Datentyp Variant verwendet.

Vorteil von Variants:

Dieser Datentyp sollte verwendet werden, wenn die Art der zu bearbeitenden Daten unbekannt ist.

Nachteile von Variants:

  • mehr Speicherbedarf, langsamere Verarbeitung     , Übersicht über die Art der zu bearbeitenden Werte kann verloren gehen

Befehle zum Umwandeln von Typen

cdat(expr) Konvertiert expr (numerischer Wert) in Datum/Zeit

creal(expr)                        Konvertiert expr (numerisch oder string) in eine reele Zahl

Cint(expr) Konvertiert in einen Integerwert

Csng(expr Konvertiert expr (numerisch oder string) in eine reele Zahl

Cstr(expr) Konvertiert in einen Stringwert

Bsp.: dialog1.text1.caption=cstr([zelle].contents)

Cvar(expr)                        Konvertiert in den Datentyp variant


Parameterabfrage

z.B.: @WENN(E5>$B$9*2/3;$B$8;0)

[E5] momentanen Holzbestand

[B9] ursprünglicher Holzbestand [Ausgangsgröße]

[B8] Schlägerungsrate=1000

Wenn der momentane Holzbestand größer ist als 2/3 des ursprünglichen Holzbestandes, dann dürfen 1000

Einheiten abgeholzt werden. Ist dies nicht der Fall, darf keine Schlägerung erfolgen.


z.B.: @WENN($ZAHLUNGSART=1; B9*$P/100;0)

z.B.: @WENN($ZAHLUNGSART=1; (B10+E9)*$P/100;E9*$P/100)


Diverse Vorgangsweisen


"Schließen eines Dialoges":

Mit der Click Methode:

Dialog1.close oder source.parent.close


"Übergabe von Textfeld zu Slider mit Ausschluß von Null":

Mit der Change Methode:

If dialog1.text2.caption <> "" Then dialog1.slider1.value=Cint(dialog1.text2.caption)

Cint wird benötigt, da der der Slider einen Integerwert liefert und das Textfeld einen String


"Auswählen eines Bereiches"

Der Wert von dialog1.text3.caption gibt die Laufweite an. Tabellenanfang bei D4.

Bsp.: Ist die Laufweite=5, dann soll der Bereich: [D5..H8] markiert werden

Endzelladr Adresse, bis zu der markiert werden soll.


Variablen definieren:                         Dim endzelladr, bereichsgrenze as string

Dim bereich as range

Möglichkeit:

Bestimmen der Endzelladresse inkl. T.Zeile: endzelladr = "h"+ Cstr(3+Cint(Dialog1.Text3.caption))

Bereichsgrenze definieren inkl. Kopierzeile: bereichsgrenze = "d5.."+endzelladr

Bereich als range festsetzen: Set bereich = Bind(bereichsgrenze)

Bereich auswählen: bereich.select


Möglichkeit

Bereichsgrenze definieren inkl. Kopierzeile: bereichsgrenze ='d5..h'+Cstr(3+Cint(Dialog1.Text3.caption))

Bereich als range festsetzen: Set bereich = Bind(bereichsgrenze)

Bereich auswählen: bereich.Select


"Bereich löschen": [

dialog1.text3.caption gibt hier an, ab welchem Wert die Zellen in der Tabelle gelöscht werden sollen.

Tabellenanfang bei D4. Bsp.: Bei Laufweite=30 wird der Bereich: [d34..h8192] gelöscht


endzelladr='d'+Cstr(4+Cint(Dialog1.Text3.caption))

bereichsgrenze =endzelladr+'..h8192'     

Set bereich = Bind(bereichsgrenze)

bereich.Select

Selection.Clear Cleardata


"Nach unten kopieren":

Selection.copyfill $down


"Letzte Zelle markieren":

Dim endzelle as range

Endzelle als Range festsetzen: Set endzelle = Bind(endzelladr)

Endzelle auswählen: endzelle.select


Arbeiten mit Optionsboxen

On load:

z.B.: If[d4].contents = "1" Then dialog1.option1.value = 1 Else dialog1.option2.value = 1

On click:

z.B.: [d4].contents = "1"

[d4].contents = "0"


Arbeiten mit Checkboxes:

if (dialog1.check1.value=1) Then [E9].contents=Cstr(2000) Else [E9].contents=Cstr(0)


@FOLGE(x;n) wandelt den Wert x in ein Label um, wobei n die Anzahl der Kommawerte angibt.

Bsp: [d5]=8, @FOLGE(D5;2) liefert das Label 8,00


@KOMPR(Zeichenfolge) löscht führende, abschließende und aufeinanderfolgende Leerzeichen aus Zeichenfolge.

Zeichenfolge kann Text in ' ' (Anführungszeichen), eine Formel, die eine Zeichenfolge ergibt, bzw. die Adresse oder der Name einer Zelle sein, die ein Label oder eine Formel enthält, die ein Label ergibt.

Bsp:[C5]='test', @KOMPR(C5) liefert das Label test


Verknüpfung von Label-Feldern mit &:

Bsp.: [F5]= @FOLGE(D5;2), [C5]='test'

@KOMPR(C5)&' '&F5 liefert das Label test 8,00


Bsp.: [E12]=

+'Holzbestand: '&@FOLGE(E12;2)&' fm' liefert das Label: Holzbestand: 76396,67 fm


Bsp.: @KOMPR(' 45 3/8') = 45 3/8 wobei die führende Leerstelle vor 45 und eine der beiden Leerstellen

zwischen 45 und 3/8 gelöscht wird.


@VVERWEIS(Argument;Spaltenbereich;Versatz) ermittelt den Inhalt der Zelle in einer bestimmten Spalte einer vertikalen Verweistabelle. Ist Argument kleiner als der erste Wert in Spaltenbereich, so ergibt @VVERWEIS FEHLER. Ist Argument größer als der letzte Wert in der ersten Spalte des Bereichs, so stoppt @VVERWEIS bei der letzten Zelle in der Spalte, die mit Versatz angegeben wird, und gibt den Inhalt dieser Zelle als Antwort zurück.


Bsp.: Schulnoten:

[F5] .. Punkte bei Schularbeit; "Argument"

[a18]..[b22] Tabelle mit 2 Spalten: Punkte und Notentexte; "Spaltenbereich", => Versatz=1

@VVERWEIS(F5;$A$18..$b$22;1)

Der jeweilige Notentext wird ausgegeben


Bsp.:

@VVERWEIS(C3;B:A3..B:G6;D4)

Hinweis: Hier wird auf Zellen (A3,G6) eines 2 Dokumentes (B) zugegriffen

Quellen:


Hilfe im Script-Editor: Help, Lotus 1-2-3 Objects

Besonders aufschlußreiche Themen sind hier:

1-2-3 Classes             1-2-3 Events 1-2-3 Methods 1-2-3 Properties


Internet:

http://www.fh-wedel.de/cis/archiv/seminare/ss99/hs/Thema7/s4.htm







Haupt | Fügen Sie Referat | Kontakt | Impressum | Nutzungsbedingungen