4

有没有办法从谷歌脚本中的所有文档中获取(和更改/删除)所有触发器,就像我打开一样Script Editor -> Edit -> All your triggers

更新:

我添加了一些测试触发器并尝试循环所有电子表格文件,正如Pierre-Marie Richard所说:

function getAllSpreadsheetTriggers()
{
    var files = DriveApp.getFilesByType('application/vnd.google-apps.spreadsheet'),
        spreadsheets = [],
        triggers     = [];

    while(files.hasNext())
        spreadsheets.push( SpreadsheetApp.openById(files.next().getId()) );

    for (var i = 0; i < spreadsheets.length; i++)
    {
        triggers = ScriptApp.getUserTriggers( spreadsheets[i] );
        Logger.log(triggers);
    }
}

.getUserTriggers()总是返回一个空数组。我读了这个问题,最后一个答案是“我们决定不对这个问题采取行动。触发器始终属于特定脚本,其他脚本无法访问。文档已澄清以明确这一点。”

原来做不到?

4

2 回答 2

5

您可以使用getUserTriggers(document)getUserTriggers(forms)getUserTriggers(spreadsheet)方法从 docs/forms/spreadsheets 中获取触发器,但它只会返回指定文件的触发器。因此,如果要修改所有驱动器文件中的触发器,则需要循环访问所有文件

此外,您不能通过代码修改触发器,但可以删除触发器(deleteTrigger(Trigger) 方法)并创建一个新触发器(参见TriggerBuilder 类)。

编辑: 正如FLighter指出的那样,您无法从您正在运行的另一个脚本中获取触发器。我应该更加注意阅读文档:

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

所以,回答原来的问题,不,你不能。您可以为每个脚本编写一些代码,但需要手动触发。

于 2017-07-24T12:10:15.067 回答
2

请注意,除了 Pierre-Marie Richard 的回复,您只能删除您在文档上创建的触发器,您将无法删除其他用户创建的触发器。任何具有编辑权限的用户都可以在文档上创建触发器,但该触发器只能由该用户操作。

于 2017-07-24T12:21:43.523 回答