Class ScriptApp

Script应用

访问和操纵脚本发布和触发器。此类允许用户创建脚本触发器,并控制将脚本发布为服务。

属性

属性类型说明
AuthModeAuthMode一种枚举,用于标识 Apps 脚本能够通过触发的函数执行哪些类别的授权服务。
AuthorizationStatusAuthorizationStatus一种枚举,用于表示脚本的授权状态。
EventTypeEventType一种枚举,用于表示触发的事件的类型。
InstallationSourceInstallationSource一种枚举,用于表示脚本作为插件安装到用户的方式。
TriggerSourceTriggerSource一个枚举,用于表示触发器触发的事件的来源。
WeekDayWeekday一个枚举,表示星期几。

方法

方法返回类型简介
deleteTrigger(trigger)void移除指定触发器,使其不再运行。
getAuthorizationInfo(authMode)AuthorizationInfo获取一个对象,用于检查用户是否已授予脚本要求的所有授权。
getAuthorizationInfo(authMode, oAuthScopes)AuthorizationInfo获取一个对象,用于检查用户是否已授予所请求范围的授权。
getIdentityToken()String如果已授予 openid 范围,则获取有效用户的 OpenID Connect 身份令牌。
getInstallationSource()InstallationSource返回一个枚举值,用于指明脚本是如何作为当前用户的插件安装的(例如,用户是否通过 Chrome 应用商店自行安装,或者网域管理员是否为所有用户安装)。
getOAuthToken()String获取有效用户的 OAuth 2.0 访问令牌
getProjectTriggers()Trigger[]获取与当前项目和当前用户关联的所有可安装的触发器。
getScriptId()String获取脚本项目的唯一 ID。
getService()Service获取用于控制将脚本发布为 Web 应用的对象。
getUserTriggers(document)Trigger[]获取指定文档中归相应用户所有且可安装的所有触发器,仅适用于相应脚本或插件。
getUserTriggers(form)Trigger[]获取指定表单中归相应用户所有且可安装的所有触发器,仅限此脚本或插件。
getUserTriggers(spreadsheet)Trigger[]获取指定电子表格中归相应用户所有的所有可安装的触发器,仅限此脚本或插件。
invalidateAuth()void使有效用户执行当前脚本的授权失效。
newStateToken()StateTokenBuilder为可在回调 API(例如 OAuth 流程)中使用的状态令牌创建构建器。
newTrigger(functionName)TriggerBuilder开始创建可安装的触发器,该触发器在触发时会调用给定的函数。
requireAllScopes(authMode)void验证用户是否已针对脚本请求的所有范围授予同意声明。
requireScopes(authMode, oAuthScopes)void验证用户是否已针对所请求的范围授予同意。

详细文档

deleteTrigger(trigger)

移除指定触发器,使其不再运行。

// Deletes all triggers in the current project. const triggers = ScriptApp.getProjectTriggers(); for (let i = 0; i < triggers.length; i++) {   ScriptApp.deleteTrigger(triggers[i]); }

参数

名称类型说明
triggerTrigger要删除的触发器。

授权

使用此方法的脚本需要获得以下一项或多项范围的授权:

  • https://www.googleapis.com/auth/script.scriptapp

getAuthorizationInfo(authMode)

获取一个对象,用于检查用户是否已授予脚本要求的所有授权。该对象还提供了一个授权网址,供用户授予这些权限(如果任何脚本要求未获得授权)。

某些脚本执行可以在没有用户同意的情况下开始,即使脚本使用了所有必需的范围。此对象中的信息可让您控制对需要特定范围的代码部分的访问权限,并请求对这些范围进行授权以供后续执行。

const authInfo = ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL); const status = authInfo.getAuthorizationStatus(); const url = authInfo.getAuthorizationUrl();

参数

名称类型说明
authModeAuthMode请求授权信息的授权模式;在几乎所有情况下,authMode 的值都应为 ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL),因为没有其他授权模式要求用户授予授权。

返回

AuthorizationInfo - 可提供有关用户授权状态信息的对象。


getAuthorizationInfo(authMode, oAuthScopes)

获取一个对象,用于检查用户是否已授予对所请求范围的授权。该对象还提供了一个授权网址,供用户授予这些权限(如果任何请求的范围未获得授权)。

某些脚本执行可以在没有用户同意的情况下开始,即使脚本使用了所有必需的范围。借助此对象中的信息,您可以控制对需要特定范围的代码部分的访问权限,并请求对这些范围进行授权以供后续执行。如果范围无效或不是脚本必需的,则会导致错误。

const authInfo = ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL, [   'https://www.googleapis.com/auth/documents',   'https://www.googleapis.com/auth/presentations', ]); const status = authInfo.getAuthorizationStatus(); const url = authInfo.getAuthorizationUrl();

参数

名称类型说明
authModeAuthMode请求授权信息的授权模式;在几乎所有情况下,authMode 的值都应为 ScriptApp.AuthMode.FULL,因为没有其他授权模式要求用户授予授权。
oAuthScopesString[]请求授权信息的 OAuth 范围。

返回

AuthorizationInfo - 一个对象,用于提供有关用户授权状态的信息,以及在缺少某些同意情况时的授权网址。


getIdentityToken()

如果已授予 openid 范围,则获取有效用户的 OpenID Connect 身份令牌。此范围默认情况下未包含在内,您必须在清单文件中将其添加为显式范围才能请求此范围。添加 https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile 范围可在令牌中返回其他用户信息。

返回的 ID 令牌是经过编码的 JSON Web 令牌 (JWT),必须对其进行解码才能从中提取信息。以下示例展示了如何解码令牌并提取有效用户的 Google 个人资料 ID。

const idToken = ScriptApp.getIdentityToken(); const body = idToken.split('.')[1]; const decoded = Utilities                     .newBlob(                         Utilities.base64Decode(body),                         )                     .getDataAsString(); const payload = JSON.parse(decoded);  Logger.log(`Profile ID: ${payload.sub}`);
如需查看返回的字段(声明)的完整列表,请参阅 OpenID Connect 文档。

返回

String - 身份令牌(如有);否则为 null


getInstallationSource()

返回一个枚举值,用于指明脚本是如何作为当前用户的插件安装的(例如,用户是否通过 Chrome 应用商店自行安装,或者网域管理员是否为所有用户安装)。

返回

InstallationSource - 安装来源。


getOAuthToken()

获取有效用户的 OAuth 2.0 访问令牌。如果脚本的 OAuth 权限范围足以授权另一个通常需要自己的 OAuth 流程的 Google API(例如 Google Picker),脚本可以通过传递此令牌来绕过第二个授权提示。令牌会在一段时间后(至少几分钟)过期;脚本应处理授权失败情况,并在需要时调用此方法来获取新令牌。

此方法返回的令牌仅包含脚本当前需要的范围。之前已获授权但脚本不再使用的范围不会包含在返回的令牌中。如果除了脚本本身需要的 OAuth 权限范围之外,还需要其他权限范围,则可以在脚本的清单文件中指定这些权限范围。

返回

String - OAuth 2.0 令牌的字符串表示形式。


getProjectTriggers()

获取与当前项目和当前用户关联的所有可安装的触发器。

Logger.log(     `Current project has ${ScriptApp.getProjectTriggers().length} triggers.`, );

返回

Trigger[] - 与此项目关联的当前用户的触发器数组。

授权

使用此方法的脚本需要获得以下一项或多项范围的授权:

  • https://www.googleapis.com/auth/script.scriptapp

getScriptId()

获取脚本项目的唯一 ID。这是获取脚本项目唯一标识符的首选方法,而不是 getProjectKey()。此 ID 可用于之前提供项目密钥的所有位置。

返回

String - 脚本项目的 ID。


getService()

获取用于控制将脚本发布为 Web 应用的对象。

// Get the URL of the published web app. const url = ScriptApp.getService().getUrl();

返回

Service - 用于观察和控制将脚本发布为 Web 应用的对象。


getUserTriggers(document)

获取指定文档中此用户拥有的所有可安装的触发器,仅适用于此脚本或插件。此方法无法用于查看附加到其他脚本的触发器。

const doc = DocumentApp.getActiveDocument(); const triggers = ScriptApp.getUserTriggers(doc); // Log the handler function for the first trigger in the array. Logger.log(triggers[0].getHandlerFunction());

参数

名称类型说明
documentDocument可能包含可安装触发器的 Google 文档文件。

返回

Trigger[] - 指定文档中归相应用户所有的触发器数组。

授权

使用此方法的脚本需要获得以下一项或多项范围的授权:

  • https://www.googleapis.com/auth/script.scriptapp

getUserTriggers(form)

获取指定表单中归相应用户所有的所有可安装的触发器,仅限此脚本或插件。此方法无法用于查看附加到其他脚本的触发器。

const form = FormApp.getActiveForm(); const triggers = ScriptApp.getUserTriggers(form); // Log the trigger source for the first trigger in the array. Logger.log(triggers[0].getTriggerSource());

参数

名称类型说明
formForm可能包含可安装触发器的 Google 表单文件。

返回

Trigger[] - 指定表单中归相应用户所有的触发器数组。

授权

使用此方法的脚本需要获得以下一项或多项范围的授权:

  • https://www.googleapis.com/auth/script.scriptapp

getUserTriggers(spreadsheet)

获取指定电子表格中归相应用户所有且仅适用于相应脚本或插件的所有可安装触发器。此方法无法用于查看附加到其他脚本的触发器。

const ss = SpreadsheetApp.getActiveSpreadsheet(); const triggers = ScriptApp.getUserTriggers(ss); // Log the event type for the first trigger in the array. Logger.log(triggers[0].getEventType());

参数

名称类型说明
spreadsheetSpreadsheet可能包含可安装触发器的 Google 表格文件。

返回

Trigger[] - 指定电子表格中相应用户所拥有的触发器数组。

授权

使用此方法的脚本需要获得以下一项或多项范围的授权:

  • https://www.googleapis.com/auth/script.scriptapp

invalidateAuth()

使有效用户执行当前脚本的授权失效。用于使当前脚本的任何权限失效。对于标记为一次性授权的函数,此方法尤为有用。由于一次性授权函数只能在脚本获得授权后的首次运行中调用,因此如果您希望在之后执行操作,必须撤消脚本拥有的任何授权,以便用户可以再次看到授权对话框。

ScriptApp.invalidateAuth();

抛出

Error - 失效失败时


newStateToken()

为可在回调 API(例如 OAuth 流程)中使用的状态令牌创建构建器。

// Generate a callback URL, given the name of a callback function. The script // does not need to be published as a web app; the /usercallback URL suffix // replaces /edit in any script's URL. function getCallbackURL(callbackFunction) {   // IMPORTANT: Replace string below with the URL from your script, minus the   // /edit at the end.   const scriptUrl =       'https://script.google.com/macros/d/1234567890abcdefghijklmonpqrstuvwxyz';   const urlSuffix = '/usercallback?state=';   const stateToken = ScriptApp.newStateToken()                          .withMethod(callbackFunction)                          .withTimeout(120)                          .createToken();   return scriptUrl + urlSuffix + stateToken; }

在大多数 OAuth2 流程中,state 令牌会直接传递给授权端点(而不是作为回调网址的一部分),然后授权端点会将其作为回调网址的一部分进行传递。

例如:

  • 脚本将用户重定向到 OAuth2 授权网址:https://accounts.google.com/o/oauth2/auth?state=token_generated_with_this_method&callback_uri=https://script.google.com/macros/d/1234567890abcdefghijklmonpqrstuvwxyz/usercallback&other_oauth2_parameters
  • 用户点击“授权”,OAuth2 授权页面会将用户重定向回 https://script.google.com/macros/d/1234567890abcdefghijklmonpqrstuvwxyz/usercallback?state=token_generated_with_this_method&other_params_that_include_tokens_or_grants
  • 上述重定向(返回到 http://script.google.com/...)会导致浏览器请求 /usercallback,从而调用 StateTokenBuilder.withMethod(method) 指定的方法。

返回

StateTokenBuilder - 用于继续执行状态令牌构建过程的对象。


newTrigger(functionName)

开始创建可安装的触发器,该触发器在触发时会调用给定的函数。

// Creates an edit trigger for a spreadsheet identified by ID. ScriptApp.newTrigger('myFunction')     .forSpreadsheet('1234567890abcdefghijklmnopqrstuvwxyz_a1b2c3')     .onEdit()     .create();

在创建触发器之前,请验证关联的函数是否拥有所有必需的 OAuth 权限

参数

名称类型说明
functionNameString触发器触发时要调用的函数。您可以使用所含库中的函数,例如 Library.libFunction1

返回

TriggerBuilder - 用于继续触发器构建过程的对象。

授权

使用此方法的脚本需要获得以下一项或多项范围的授权:

  • https://www.googleapis.com/auth/script.scriptapp

requireAllScopes(authMode)

验证用户是否已针对脚本请求的所有范围授予同意声明。如果执行流程依赖于脚本请求的所有范围,请使用此方法。如果缺少任何同意情况,此方法会结束当前执行并呈现授权提示,以请求缺少的同意情况。

仅当用户从支持精细权限同意的界面(例如从 Apps 脚本 IDE 中)运行脚本时,此方法才有效。如果脚本在缺少不支持的平台(例如 Google Workspace 加购项)的同意声明的情况下运行,则脚本会在执行开始时呈现授权提示,以请求所有范围。

ScriptApp.requireAllScopes(ScriptApp.AuthMode.FULL);

参数

名称类型说明
authModeAuthMode需要评估脚本范围的授权模式。在几乎所有情况下,authMode 的值都应为 ScriptApp.AuthMode.FULL,因为没有其他授权模式要求用户授予授权。

requireScopes(authMode, oAuthScopes)

验证用户是否已针对所请求的范围授予同意。如果执行流程依赖于一项或多项服务,请使用此方法。如果缺少任何指定的同意情况,此方法会结束当前执行并呈现授权提示,以请求缺少的同意情况。如果范围无效或不是脚本必需的,则会导致错误。

仅当用户从支持精细权限同意的界面(例如从 Apps 脚本 IDE 中)运行脚本时,此方法才有效。如果脚本在缺少不支持的平台(例如 Google Workspace 加购项)的同意声明的情况下运行,则脚本会在执行开始时呈现授权提示,以请求所有范围。

ScriptApp.requireScopes(ScriptApp.AuthMode.FULL, [   'https://www.googleapis.com/auth/documents',   'https://www.googleapis.com/auth/presentations', ]);

参数

名称类型说明
authModeAuthMode需要评估所请求范围的授权模式。在几乎所有情况下,authMode 的值都应为 ScriptApp.AuthMode.FULL,因为没有其他授权模式要求用户授予授权。
oAuthScopesString[]完成指定执行流程所需的 OAuth 范围。

已弃用的方法