Integrierte Google-Dienste

Google Apps Script bietet mehr als 30 integrierte Dienste für die Interaktion mit Nutzerdaten, anderen Google-Systemen und externen Systemen. Diese Dienste werden als globale Objekte bereitgestellt, ähnlich dem Standardobjekt Math in JavaScript. So bietet Math beispielsweise Methoden wie random() und Konstanten wie PI. Der Tabellendienst von Apps Script bietet Methoden wie openById(id), Klassen (untergeordnete Objekte) wie Range und Enums wie DataValidationCriteria.

Die Referenzdokumentation für Dienste, die Google Workspace-Produkte steuern, finden Sie im Abschnitt „Google Workspace Services“ unter der Überschrift „Reference“ in der Seitenleiste dieser Website. Hilfsdienste (z. B. zum Erstellen von Benutzeroberflächen, zum Parsen von XML oder zum Schreiben von Protokolldaten) werden im Abschnitt „Script Services“ (Script-Dienste) aufgeführt.

Moderne JavaScript-Funktionen

Apps Script unterstützt zwei JavaScript-Laufzeitumgebungen: die moderne V8-Laufzeitumgebung und eine ältere, die auf dem Rhino JavaScript-Interpreter von Mozilla basiert.

Die V8-Laufzeitumgebung unterstützt moderne ECMAScript-Syntax und -Funktionen. Die Rhino-Laufzeit basiert auf dem älteren Standard JavaScript 1.6 sowie einigen Funktionen aus 1.7 und 1.8. Wählen Sie die Laufzeitumgebung aus, die Sie für Ihr Script verwenden möchten. Die V8-Laufzeitumgebung wird jedoch dringend empfohlen.

Jede Laufzeit unterstützt JavaScript-Klassen und -Objekte, die zusätzlich zu den integrierten und erweiterten Google-Diensten für Ihr Script verfügbar sind. Ihre Skripts können allgemeine Objekte wie Array, Date, RegExp, usw. sowie die globalen Objekte Math und Object verwenden.

Da Apps Script-Code auf den Servern von Google ausgeführt wird (mit Ausnahme von HTML-Service-Seiten), sind browserbasierte JavaScript-Funktionen wie die DOM-Manipulation oder die Window-API in Apps Script nicht verfügbar.

Automatische Vervollständigung

Der Skripteditor bietet eine Funktion zur Unterstützung von Inhalten, die häufiger als „automatische Vervollständigung“ bezeichnet wird. Damit werden die globalen Objekte sowie Methoden und Enums angezeigt, die im aktuellen Kontext des Skripts gültig sind. Vorschläge zur automatischen Vervollständigung werden automatisch angezeigt, wenn Sie nach einem globalen Objekt, einer Enumeration oder einem Methodenaufruf, der eine Apps Script-Klasse zurückgibt, einen Punkt eingeben. Beispiel:

  • Wenn Sie den vollständigen Namen eines globalen Objekts eingeben oder eines aus der automatischen Vervollständigung auswählen und dann . (einen Punkt) eingeben, werden alle Methoden und Enums für diese Klasse angezeigt.
  • Wenn Sie einige Zeichen eingeben, werden alle gültigen Vorschläge angezeigt, die mit diesen Zeichen beginnen.

Globale Objekte

Jeder Dienst stellt mindestens ein globales Objekt (auf oberster Ebene) bereit. Auf den Gmail-Dienst wird beispielsweise nur über das Objekt GmailApp zugegriffen. Einige Dienste stellen mehrere globale Objekte bereit. Der Basisservice enthält beispielsweise vier globale Objekte: Browser, Logger, MimeType und Session.

Methoden

Die globalen Objekte fast aller integrierten oder erweiterten Dienste enthalten Methoden, die Daten oder eine Apps Script-Klasse zurückgeben. In Skripts werden Methodenaufrufe in diesem Format ausgeführt:

GlobalObjectName.methodName(argument1, argument2, ..., argumentN);

Ein Skript kann beispielsweise eine E-Mail senden, indem es die Methode sendEmail(recipient, subject, body) des Gmail-Dienstes aufruft:

GmailApp.sendEmail('claire@example.com', 'Subject line', 'This is the body.');

Wenn eine Methode eine andere Apps Script-Klasse zurückgibt, können Sie Methodenaufrufe in einer Zeile verketten. Rückgabetypen werden sowohl in der automatischen Vervollständigung als auch in der Referenzdokumentation einer Methode angezeigt. Die Methode DocumentApp.create() gibt beispielsweise ein Document zurück. Die folgenden beiden Codeabschnitte sind daher gleichwertig:

var doc = DocumentApp.create('New document');
var body = doc.getTab('t.0').asDocumentTab().getBody();
body.appendParagraph('New paragraph.');

// Same result as above.
DocumentApp.create('New document').getTab('t.0').asDocumentTab().getBody()
    .appendParagraph('New paragraph.');

Untergeordnete Klassen

Jeder Dienst enthält eine oder mehrere untergeordnete Klassen, auf die Sie nicht als globales Objekt auf oberster Ebene zugreifen können. Sie können das new-Schlüsselwort auch nicht verwenden, um diese Klassen zu erstellen, wie Sie es bei Standard-JavaScript-Klassen wie Date tun würden. Um auf eine untergeordnete Klasse zuzugreifen, müssen Sie eine Methode aufrufen, die sie zurückgibt. Wenn Sie nicht sicher sind, wie Sie auf eine bestimmte Klasse zugreifen, rufen Sie die Stammseite der Referenzdokumentation des Dienstes auf. Dort sind die Klassen für den Dienst und die Methoden aufgeführt, die sie zurückgeben.

Schnittstellen

Einige Dienste enthalten Klassen, die in der Referenzdokumentation als „Schnittstellen“ gekennzeichnet sind. Dies sind generische Klassen, die als Rückgabetypen für Methoden verwendet werden, bei denen der genaue Typ nicht im Voraus bestimmt werden kann. Die Methode Body.getChild(childIndex) des Document-Dienstes gibt beispielsweise ein generisches Element-Objekt zurück. Die Element-Schnittstelle stellt eine andere Klasse dar, möglicherweise eine Paragraph oder Table. Schnittstellenobjekte sind selten allein nützlich. Rufen Sie stattdessen eine Methode wie Element.asParagraph() auf, um das Objekt wieder in eine bestimmte Klasse umzuwandeln.

Enums

Die meisten Dienste enthalten Enums (aufgezählte Typen) mit benannten Werten. Der Google Drive-Dienst verwendet beispielsweise die Enums Access und Permission, um zu bestimmen, welche Nutzer Zugriff auf eine Datei oder einen Ordner haben. In den meisten Fällen greifen Sie über das globale Objekt auf diese Enums zu, wie im folgenden Beispiel gezeigt:

// Creates a folder that anyone on the Internet can read from and write to.
// (Domain administrators can prohibit this setting for Google Workspace users.)
var folder = DriveApp.createFolder('Shared Folder');
folder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);