Cocoabuilder
 
AppleScript-Einführung zu Microsoft Excel – Kapitel 1
VON : RAMses
DATUM : 2008-09-01 09:01:25

Formatierung von Excel-Zellen
Im Prinzip ist eine Tabellenkalkulation ähnlich aufgebaut wie eine Datenbank-Tabelle. Es gibt Spalten und Zeilen. In jede Zelle kann man Inhalte eintragen, für die eine Formatierung angegeben werden muss, damit die Darstellung der Inhalte richtig erfolgt. Texte sollen unverändert und mit Textauszeichnungen wie halbfett oder kursiv angezeigt werden. Zahlen können mit fester Kommastelle angezeigt werden, oder auch negative Zahlen rot und positive Zahlen schwarz dargestellt werden.

All diese Informationen benötigt man im Prinzip bei einer Datenbank auch. Daher ist es für Anwender, die bereits Erfahrungen mit Datenbanken wie z.B. FileMaker Pro haben, auf diese Weise einfacher den Einstieg in die AppleScript-Programmierung mit Excel zu finden.

Wer bereits Erfahrungen mit Word oder Quark XPress hat, der kennt das Problem mit Tabellen. Diese sind grundsätzlich Textrahmen und man kann diese mit individuellen Formatierungen so ausgestalten, dass Zahlen ebenfalls entsprechend formatiert angezeigt werden.

Bei Excel ist das anders. Excel speichert genau das ab, was man einträgt, unabhängig von der Formatierung. Das bedeutet, dass man einmal "12,5" eintragen kann, ein andermal "12,50". Wird die Formatierung der Zelle hierbei als Text angegeben, wird der Inhalt direkt so angezeigt wird wie er eingegeben wurde. Wählt man allerdings die Formatierung "Zahl mit 2 Nachkommastellen", so werden alle Zellinhalte entsprechend angezeigt.

Sie werden sich jetzt vielleicht fragen, warum die Formatierung hier so von Interesse sein soll – schließlich sollen wir doch programmieren lernen. Das ist zwar richtig, dennoch ist das Rechnen mit Inhalten aus Excel-Zellen nicht ganz einfach, da die Inhalte nicht unbedingt so aus Excel herauskommen, wie sie dort angezeigt werden. Das bedeutet im obigen Beispiel mit den beiden Zahlen, dass wir Zahlen, die aus Excel-Zellen kommen, zuerst in ein einheitliches Format bringen müssen, ehe wir sie bearbeiten. Das kann mitunter sehr umfangreich und kompliziert werden, da wir alle möglichen Fälle von Zellinhalten mit berücksichtigen müssen.

Einfacher ist es in einem solchen Fall, die Auswertungen von Excel vornehmen zu lassen. Excel kann ja vielfältige Operationen mit Zellen ausführen, eben auch Additionen. In diesem Fall überlassen wir Excel die Probleme mit den unterschiedlichen Eingabeformaten. Funktionen werden immer in einer weiteren Zelle ausgeführt, und beginnen mit einem "=".

Beispiel 1: 5 Werte addieren
Direkt in Excel:

> Abbildung Tabelle




Stellen Sie diese Tabelle einmal in einem leeren Excel-Dokument nach. Falls Sie im Funktionsfeld (das mit dem "="Zeichen) Probleme haben sollten, dieses wieder zu verlassen, dann drücken Sie einfach die Taste "esc". Die letzte Eingabe wird dann nicht ausgeführt.

Jetzt dasselbe als AppleScript-Code:
> Tell application "Microsoft Excel"
>   Tell document 1
>     Tell sheet 1
>       -- die erste Zeile befüllen
>       set value of cell "A1" to "12,5"
>       set value of cell "B1" to "65,4"
>       set value of cell "C1" to "13,2"
>       set value of cell "D1" to "24,4"
>       set value of cell "E1" to "18"
>       set value of cell "F1" to "=Summe(A1:E1)"

>       -- die zweite Zeile befüllen
>       set value of cell "A2" to "12.5"
>       set value of cell "B2" to "65.4"
>       set value of cell "C2" to "13.2"
>       set value of cell "D2" to "24.4"
>       set value of cell "E2" to "18"
>       set value of cell "F2" to "=Summe(A2:E2)"

>       -- die dritte Zeile befüllen
>       set value of cell "A3" to "12,50"
>       set value of cell "B3" to "65,40"
>       set value of cell "C3" to "13,20"
>       set value of cell "D3" to "24,40"
>       set value of cell "E3" to "18,00"
>       set value of cell "F3" to "=Summe(A3:E3)"
>     End tell
>   End tell
> End tell

Lassen Sie das AppleScript über den Abspiel-Knopf starten und staunen Sie, wie die Inhalte eingetragen werden. Falls Sie einen Fehler im Programmcode haben, lässt sich das AppleScript nicht kompilieren bzw. es wird eine Fehlermeldung angezeigt.

Der Hintergrund ist der, dass die Struktur des Programmcodes beim Kompilieren auf Vollständigkeit überprüft wird. Wenn Sie also ein "end tell" vergessen, ist das ein logischer Fehler, denn 3 mal wurde ein Objekt mit "tell" angesprochen, daher muss dieses auch mit 3 mal "end tell" wieder aufgehoben werden.

Haben Sie dagegen einen inhaltlichen Fehler gemacht, wie z.B. eine Zahl falsch geschrieben, dann kann das nicht als falsch erkannt werden. Solche inhaltlichen Fehler werden erst beim Ausführen des Programms von Ihnen erkannt.

So, es fällt jetzt auf dass das Resultat dasselbe ist. Wir haben einfach per Programm diesselben Inhalte eintragen lassen wie wir vorher von Hand eingegeben haben.

Erklärung des AppleScript-Programms
Bevor wir fortfahren, möchte ich allerdings das obige Programm zuerst einmal näher erläutern:

Mit tell application "Microsoft Excel" sagen wir dem AppleScript, welches Programm wir jetzt fernsteuern möchten. Grundsätzlich kann das ja auch der Finder oder jedes andere Apple-Programm sein. tell bedeutet dabei soviel wie: "ich rufe jetzt ein Objekt auf". Das Objekt wird mit application sogleich nachgeliefert, also ein Programm wird angesprochen. Weiter unten sehen wir, dass wir auch Dokumente oder Excel-Arbeitsblätter aufrufen können. "Microsoft Excel" ist der Programmname, wie er auch wörtlich im Finder angezeigt wird, mit Sonderzeichen. Damit der Inhalt von Applescript nicht versucht wird zu analysieren, fassen wir ihn in Ausrufezeichen – damit wird der Text als string-Ausdruck behandelt und damit für AppleScript als statische Variable vom Typ string behandelt.

Dasselbe erfolgt im weiteren auch mit tell document 1. Dabei wird ein Dokument-Objekt aufgerufen. Wir könnten wiederum wie oben den genauen Namen des Dokuments eintragen. Da wir aber dieses noch nicht gespeichert haben und damit noch keinen greifbaren Namen haben, die wir eintragen könnten, so verwenden wir die Index-Schreibweise. Das ist eine Art Nummerierung der offenen Dokumente. Wenn nur ein Excel-Dokument offen ist, gibt es außer der 1 nichts anderes. Gibt es noch ein weiteres Excel-Dokument, welches auch ausgeblendet im Dock liegen kann, haben die Dokumente die Index-Reihenfolge sortiert nach dem letzten Aktivieren, also wann wir das letzte Mal mit der Maus auf das Dokument geklickt haben. Im Prinzip kann man sich das wie Ebenen vorstellen, die oberste Ebene hat den Index 1, die zweite den Index 2 usw.

Als letztes müssen wir noch mit Tell sheet eingrenzen, welches Arbeitsblatt verwendet werden soll. Da bei neuen Dokumenten diese auch noch keinen eindeutigen Namen haben, verwenden wir wiederum die Index-Schreibweise. Arbeitsblätter sind die Reiter unten links an jedem Excel-Dokument und grenzt mehrere Tabellen innerhalb eines Excel-Dokuments voneinander ab.

Am Ende des Programms müssen wir jeden tell-Befehl wieder mit end tell abschließen.

Wenn wir jetzt den weiteren Programmcode -- die erste Zeile befüllen anschauen, dann ist dies eine Kommentarzeile. Immer wenn zwei Bindestriche hintereinander geschrieben werden, dann ignoriert AppleScript den folgenden Text einer Zeile.

Mit set value of cell "A1" to "12,5" teilen wir mit, dass wir mit set einen Inhalt neu definieren möchten. Das entspricht dem Gleichzeichen in anderen Programmiersprachen. Eine cell ist die Objektbezeichnung für eine Excel-Zelle – diese wird über die Excel-typische Bezeichnung über die Angabe von Spalte und Zeile bezeichnet. Da Excel alle Spalten mit Buchstaben von A bis Z, AA bis AZ usw. und Zeilen mit fortlaufenden Zahlenwerten bezeichnet, kann man diese wie ein Schachbrett miteinander kombinieren und erhält mit dem Schnittpunkt die gewünschte Zelle. Um AppleScript klar zu machen, dass wir den Inhalt der Zelle ändern möchten, und nicht etwa die Zelle selber (Formatierung oder ähnliches), geben wir dies mit value of cell "A1" an.

Ein kleiner aber wichtiger Unterschied ist bei AppleScript die Zuweisung von Variableninhalten. Heißt es beispielsweise in C/Objective-C meinText = "lustiger Text", so wird dies in AppleScript zu set meinText to "Lustiger Text".

Der String "=Summe(A3:E3)" aus set value of cell "F3" to "=Summe(A3:E3)" ist kein AppleScript-Befehl, sondern löst in Excel eine entsprechende Auswertung einer Funktion aus. Auf diese Weise wird die mögliche Arbeitsteilung von AppleScript und Excel-Funktionen recht gut sichtbar.

Zugehörige Nachrichten Autor Datum
mlEinführung in Excel RAMses 2008-09-01 08:52:20
mlAppleScript-Einführung zu Microsoft Excel – Kapitel 1 RAMses 2008-09-01 09:01:25
 

In Kooperation mit Powermacintosh.de – Die Welten des Macs