內建 Google 服務

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.71.8 的部分功能。您可以自由選擇要搭配指令碼使用的執行階段,但強烈建議使用 V8 執行階段。

除了內建和進階 Google 服務之外,每個執行階段都支援 JavaScript 類別和物件,供指令碼使用。您的指令碼可以使用 ArrayDateRegExp等等常見物件,以及 MathObject 全域物件。

使用自動完成功能

指令碼編輯器提供「內容輔助」功能 (一般稱為「自動完成」),可顯示全域物件,以及在指令碼目前情境中有效的函式和列舉。每當您在全域物件、列舉或方法呼叫後輸入句號,系統就會自動顯示自動完成建議,並傳回 Apps Script 類別。例如:

  • 如果您輸入全域物件的完整名稱或從自動完成功能選取名稱,然後輸入 . (半形句號),系統就會顯示該類別的所有方法和列舉。
  • 輸入幾個字元後,系統會顯示以這些字元開頭的所有有效建議。

瞭解全域物件

每項服務至少會提供一個全域 (頂層) 物件;舉例來說,Gmail 服務只能透過 GmailApp 物件存取。部分服務提供多個全域物件,例如「Base service」包含四個全域物件:BrowserLoggerMimeTypeSession

通話方式

幾乎所有內建或進階服務的全域物件都包含可傳回資料或 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 是代表其他類別的介面,可能是 ParagraphTable。介面物件本身很少有用,通常您會想呼叫 Element.asParagraph() 等方法,將物件轉換回精確的類別。

使用列舉

大多數服務都包含幾個具名值的列舉 (列舉型別)。舉例來說,雲端硬碟服務會使用列舉 AccessPermission,判斷哪些使用者有權存取檔案或資料夾。在幾乎所有情況下,您都會從全域物件存取這些列舉。舉例來說,對方法 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);