Class ScriptApp

ScriptApp

访问和操纵脚本发布和触发器。通过该类,用户可以创建脚本触发器和控制将脚本作为服务进行发布。

属性

属性类型说明
AuthModeAuthMode一个枚举,用于确定 Apps 脚本可以通过触发的函数执行哪些类别的授权服务。
AuthorizationStatusAuthorizationStatus表示脚本授权状态的枚举。
EventTypeEventType表示触发的事件类型的枚举。
InstallationSourceInstallationSource用于指明脚本如何作为插件安装给用户的枚举。
TriggerSourceTriggerSource指明导致触发器触发的事件来源的枚举。
WeekDayWeekday表示星期几的枚举。

方法

方法返回类型简介
deleteTrigger(trigger)void移除指定的触发器,使其不再运行。
getAuthorizationInfo(authMode)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开始创建安装式触发器,该触发器在触发后会调用指定函数。

详细文档

deleteTrigger(trigger)

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

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

参数

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

授权

使用此方法的脚本需要通过以下一个或多个范围进行授权:

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

getAuthorizationInfo(authMode)

获取用于确定用户是否需要授权此脚本来使用一项或多项服务的对象,以及提供授权对话框的网址。如果脚本作为使用安装触发器插件发布,则此信息可用于控制用户未获得必要授权的代码段的访问权限。或者,插件也可以要求用户打开授权对话框的网址来解决问题。

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

参数

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

返回

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


getIdentityToken()

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

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

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

返回

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


getInstallationSource()

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

返回

InstallationSource - 安装来源。


getOAuthToken()

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

此方法返回的令牌仅包含脚本当前所需的范围。之前授权但脚本不再使用的范围不会包含在返回的令牌中。如果除脚本本身之外还需要其他 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.
var url = ScriptApp.getService().getUrl();

返回

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


getUserTriggers(document)

仅获取此脚本中此用户拥有的所有可安装触发器(仅限此脚本或插件)。此方法不能用于查看附加到其他脚本的触发器。

var doc = DocumentApp.getActiveDocument();
var 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)

仅获取此脚本或插件的指定形式下该用户拥有的所有可安装触发器。此方法不能用于查看附加到其他脚本的触发器。

var form = FormApp.getActiveForm();
var 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)

获取指定电子表格中此用户拥有的所有可安装触发器,仅针对此脚本或插件。此方法不能用于查看附加到其他脚本的触发器。

var ss = SpreadsheetApp.getActiveSpreadsheet();
var 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.
  var scriptUrl = 'https://script.google.com/macros/d/1234567890abcdefghijklmonpqrstuvwxyz';
  var urlSuffix = '/usercallback?state=';
  var 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();

参数

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

返回

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

授权

使用此方法的脚本需要通过以下一个或多个范围进行授权:

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

已废弃的方法