Google Apps Script 提供超過 30 種內建服務,可與使用者資料、其他 Google 系統和外部系統互動。這些服務會以類似 JavaScript 標準Math
物件的全球物件形式提供。舉例來說,就像 Math
提供 random()
等方法和 PI
等常數一樣,Apps Script 的試算表服務提供 openById(id)
等方法、Range
等類別 (子項物件) 和 DataValidationCriteria
等列舉。
控制 Google Workspace 產品的服務參考說明文件,會收集在這個網站側欄「Reference」標題下的「Google Workspace Services」部分。實用程式服務 (例如建立使用者介面、剖析 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 類別。例如:
- 如果您輸入全域物件的完整名稱或從自動完成功能選取名稱,然後輸入
.
(半形句號),系統就會顯示該類別的所有方法和列舉。 - 輸入幾個字元後,系統會顯示以這些字元開頭的所有有效建議。
瞭解全域物件
每項服務至少會提供一個全域 (頂層) 物件;舉例來說,Gmail 服務只能透過 GmailApp
物件存取。部分服務提供多個全域物件,例如「Base service」包含四個全域物件: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.');
存取子類別
每項服務都包含一或多個子項類別,無法像全域物件一樣從頂層存取。您無法使用 new
關鍵字建構這些類別,就像使用標準 JavaScript 類別 (例如 Date
) 一樣;您只能呼叫會傳回子項類別的方法,藉此存取子項類別。如果不確定如何存取特定類別,請前往服務的參考文件根頁面,尋找傳回所需類別的方法。
處理介面
少數服務包含標示為「介面」的特殊類別,這些是泛型類別,用做無法預先判斷確切類型的方法傳回型別;舉例來說,Document 服務方法 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);