时间驱动触发范围在Google Script

时间:2018-04-10 10:30:06

标签: google-apps-script

UPD:

我有一个已发布的应用程序,如Spreadsheets插件和一些电子表格,它们使用此插件并执行时间驱动的触发器:

ScriptApp.newTrigger("myFunction")
   .timeBased()
   .everyHours(1)
   .create();

一切正常,但我有点困惑,这个触发器在什么范围内起作用?

由于这是一个已发布的插件,脚本是一个,时间驱动的功能也是一个,对吗?正如迭戈所说:“它适用于启动触发器的用户的用户范围”。好的,但电子表格呢?

我需要写(如果触发器只看到这个电子表格):

function myFunction(){
    var ss = SpreadsheetApp.getActive();
}

或(如果它在没有绑定到特定电子表格的情况下运行):

function myFunction(){
    var ss = SpreadsheetApp.openById('<some id>');
}

换句话说,当我设置触发器时,我是仅为当前文档还是为所有文档设置它?

谢谢!

1 个答案:

答案 0 :(得分:1)

它适用于启动触发器的用户的用户范围。以下是您可以查看的方式:

  1. 创建用户属性值i并将其设置为零
  2. 在新功能中,获取用户属性i,将其写入工作表,递增i并将其保存回属性。
  3. 创建一个触发器,以便该函数每分钟运行一次。
  4. 以不同的用户身份查看电子表格。
  5. 作为不同的用户,重复步骤1&amp; 2看到现在i已经从零开始了,但是1分钟的触发器仍在迭代原始的i值(因为不同的用户无法访问第一个用户的属性)。
  6. 以下是代码:

    function getAndPrintUserProperty() {
      var userProperties = PropertiesService.getUserProperties();
      var i = userProperties.getProperty("i");
      i++;
      SpreadsheetApp.getActive().getSheetByName("Sheet1").appendRow([i]);
      userProperties.setProperty("i", i);
    }
    
    function addUserProperty() {
      PropertiesService.getUserProperties().setProperty("i", 0);
    }