Google Apps Script provides more than 30 built-in services for interacting with
user data, other Google systems, and external systems. These services are
provided as global objects akin to JavaScript's standard
Math
object. For example, just as Math
offers methods like random()
and
constants like PI
, Apps Script's
Spreadsheet service offers methods like
openById(id)
,
classes (child objects) like
Range
, and enums like
DataValidationCriteria
.
The reference documentation for services that control products are collected in the " Services" section under the "Reference" header in the sidebar of this site. Utility services (for things like creating user interfaces, parsing XML, or writing log data) are collected in the "Script Services" section.
Modern JavaScript features
Apps Script supports two JavaScript runtimes: the modern V8 runtime and an older one powered by Mozilla's Rhino JavaScript interpreter.
The V8 runtime supports modern ECMAScript syntax and features. The Rhino runtime is based on the older JavaScript 1.6 standard, plus a few features from 1.7 and 1.8. You can freely choose which runtime to use with your script, but the V8 runtime is strongly recommended.
Each runtime supports JavaScript classes and objects that are available to your
script in addition to the built-in
and advanced Google services. Your
scripts can use common objects like
Array
,
Date
,
RegExp
,
and so forth,
as well as the
Math
and
Object
global objects.
Using autocomplete
The script editor provides a "content assist" feature, more commonly called "autocomplete," which reveals the global objects as well as methods and enums that are valid in the script's current context. Autocomplete suggestions appear automatically whenever you type a period after a global object, enum, or method call that returns an Apps Script class. For example:
- If you type the full name of a global object or select one from autocomplete,
then type
.
(a period), you will see all methods and enums for that class. - If you type a few characters, you'll see all valid suggestions that begin with those characters.
Understanding global objects
Each service provides at least one global (top-level) object; for example,
the Gmail service is accessed solely from
the GmailApp
object. Some services
provide multiple global objects; for example, the
Base service includes four global objects:
Browser
,
Logger
,
MimeType
, and
Session
.
Calling methods
The global objects of nearly all built-in or advanced services include methods that return data or an Apps Script class. Scripts make method calls in this format:
GlobalObjectName.methodName(argument1, argument2, ..., argumentN);
For example, a script can send an email by calling the
sendEmail(recipient, subject, body)
method of the Gmail service like so:
GmailApp.sendEmail('claire@example.com', 'Subject line', 'This is the body.');
If a method returns another Apps Script class, you can chain method calls on one
line. (Return types are shown both in autocomplete and in a method's reference
documentation.) For example, the method
DocumentApp.create()
returns a Document
; thus, the
following two sections of code are equivalent:
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.');
Accessing child classes
Every service includes one or more child classes that cannot be accessed from
the top level as a global object can. You cannot use the new
keyword to
construct these classes, as you can with standard JavaScript classes like
Date
;
you can only access a child class by calling a method that returns it. If you're
not sure how to access a certain class, visit the root page for the service's
reference documentation and look for a method that returns the class you want.
Dealing with interfaces
A handful of services include special classes that are labeled as "interfaces"
in the reference documentation. These are generic classes used as return types
for methods that cannot determine the precise type in advance; for example,
the Document service method
Body.getChild(childIndex)
returns a generic Element
object.
Element
is an interface that represents some other class, possibly a
Paragraph
or
Table
. Interface objects are rarely
useful on their own; instead, you usually want to call a method like
Element.asParagraph()
to cast the object back to a precise class.
Working with enums
Most services include a few enums (enumerated types) of named values. For
example, the Drive service uses the enums
Access
and
Permission
to determine which users
have access to a file or folder. In almost all cases, you access these enums
from the global object. For example, a call to the method
Folder.setSharing(accessType, permissionType)
looks like this:
// Creates a folder that anyone on the Internet can read from and write to. (Domain administrators can
// prohibit this setting for users.)
var folder = DriveApp.createFolder('Shared Folder');
folder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);