Google脚本-在不同的工作表中触发和起作用

时间:2018-08-07 09:33:38

标签: google-apps-script triggers

我需要:

  • 创建新工作表
  • 调用主要功能
  • 设置触发器以调用主函数

基本上是这样:

function new_campaign(){
    var sheet_name = new_sheet();
    main_function(sheet_name);
    trigger(sheet_name);
}

使用一张工作表就没有问题,因为我可以在工作表名称之前将其设置为全局变量。 问题是我必须创建多个工作表,并且所有工作都必须继续进行。

我创建了新工作表的功能,以便它返回工作表的名称,因此我可以通过工作表调用 main_function 。 不幸的是,触发不是那么容易,因为我不知道如何通过工作表。

function trigger(sheetName) {
  ScriptApp.newTrigger("main_function")
  .timeBased()
  .everyMinutes(1)
  .create();
}

更新

根据建议,我尝试使用PropertiesService映射触发器ID与函数中需要使用的参数(在我的情况下为sheetName)

function trigger(sheetName) {
  var triggerID = ScriptApp.newTrigger("main_function")
  .timeBased()
  .everyMinutes(1)
  .create()
  .getUniqueId();
  var scriptProperties = PropertiesService.getScriptProperties();
  scriptProperties.setProperty(triggerID, sheetName);
}

更新2

我尝试从事件对象中提取触发器ID,以从scriptProperties获取sheetName。现在我的main_function像这样

function main_function() {
    var e = arguments[0];
    var scriptProperties = PropertiesService.getScriptProperties();
    var sheetName = scriptProperties.getProperty(e.triggerUid);
}

1 个答案:

答案 0 :(得分:3)

解决方案

有一个函数可以处理其他函数和触发器:

true

触发功能:

&&

和main_function函数:

function new_campaign(){
    var sheet_name = new_sheet(); //function to create a new sheet
    main_function(); //to execute main_function without delay the first time
    trigger(sheet_name); //set the trigger
}