Google Apps 脚本提供了 30 多项内置服务,可用于与用户数据、其他 Google 系统和外部系统进行交互。这些服务以全局对象的形式提供,类似于 JavaScript 的标准 Math
对象。例如,就像 Math
提供 random()
等方法和 PI
等常量一样,Apps 脚本的电子表格服务也提供 openById(id)
等方法、Range
等类(子对象)和 DataValidationCriteria
等枚举。
您可以在本网站边栏的“参考”标题下方的“Google Workspace 服务”部分找到用于控制Google Workspace 产品的服务的参考文档。实用程序服务(例如创建界面、解析 XML 或写入日志数据)会收集在“脚本服务”部分。
现代 JavaScript 功能
Apps Script 支持两种 JavaScript 运行时:现代的 V8 运行时和由 Mozilla 的 Rhino JavaScript 解释器提供支持的旧版运行时。
V8 运行时支持现代 ECMAScript 语法和功能。Rhino 运行时基于较低的 JavaScript 1.6 标准,以及 1.7 和 1.8 中的部分功能。您可以自由选择要与脚本搭配使用的运行时,但强烈建议使用 V8 运行时。
除了内置和高级 Google 服务之外,每个运行时都支持可供脚本使用的 JavaScript 类和对象。脚本可以使用 Array
、Date
、RegExp
等常见对象,以及其他对象,还可以使用 Math
和 Object
全局对象。
使用自动补全功能
脚本编辑器提供了“内容辅助”功能(通常称为“自动补全”),可显示脚本当前上下文中有效的全局对象以及方法和枚举。每当您在返回 Apps Script 类的全局对象、枚举或方法调用后输入英文句号时,系统都会自动显示自动补全建议。例如:
- 如果您输入全局对象的完整名称或从自动补全功能中选择一个对象,然后输入
.
(英文句号),您将看到该类的所有方法和枚举。 - 如果您输入几个字符,系统会显示以这些字符开头的所有有效建议。
了解全局对象
每项服务都提供至少一个全局(顶级)对象;例如,您只能通过 GmailApp
对象访问 Gmail 服务。某些服务提供多个全局对象;例如,基础服务包含四个全局对象:Browser
、Logger
、MimeType
和 Session
。
调用方法
几乎所有内置服务或高级服务的全局对象都包含用于返回数据或 Apps Script 类的方法。脚本以以下格式进行方法调用:
GlobalObjectName.methodName(argument1, argument2, ..., argumentN);
例如,脚本可以通过调用 Gmail 服务的 sendEmail(recipient, subject, body)
方法来发送电子邮件,如下所示:
GmailApp.sendEmail('claire@example.com', 'Subject line', 'This is the body.');
如果某个方法返回另一个 Apps Script 类,您可以在一行代码中链接方法调用。(返回类型会同时显示在自动补全功能和方法的参考文档中。)例如,方法 DocumentApp.create()
会返回 Document
;因此,以下两段代码是等效的:
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.');
访问子类
每个服务都包含一个或多个子类,这些子类无法像全局对象一样从顶级访问。您无法像使用 Date
等标准 JavaScript 类一样使用 new
关键字来构造这些类;您只能通过调用返回子类的方法来访问子类。如果您不确定如何访问某个类,请访问相应服务的参考文档的根页面,然后查找用于返回所需类的方法。
处理接口
少数服务包含在参考文档中标记为“接口”的特殊类。这些是泛型类,用于作为无法预先确定确切类型的方法的返回类型;例如,文档服务方法 Body.getChild(childIndex)
会返回泛型 Element
对象。Element
是一个接口,表示某个其他类,可能是 Paragraph
或 Table
。接口对象本身很少有用;相反,您通常需要调用 Element.asParagraph()
等方法,将对象转换回精确的类。
使用枚举
大多数服务都包含一些命名值的枚举(枚举类型)。例如,云端硬盘服务使用枚举 Access
和 Permission
来确定哪些用户有权访问文件或文件夹。在几乎所有情况下,您都可以通过全局对象访问这些枚举。例如,对方法 Folder.setSharing(accessType, permissionType)
的调用如下所示:
// 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);