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

戴维德

我需要:

  • 创建一个新表
  • 调用主函数
  • 设置一个将调用主函数的触发器

基本上是这样的:

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,以从中获取sheetName scriptProperties现在我的main_function样子是这样

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

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

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
}

触发功能:

function trigger(sheetName) {
  var triggerID = ScriptApp.newTrigger("main_function")
  .timeBased()
  .everyMinutes(1)
  .create()
  .getUniqueId();
  var scriptProperties = PropertiesService.getScriptProperties();
  scriptProperties.setProperty(triggerID, sheetName); //association between sheetName and triggerID to call it back
}

和main_function函数:

function main_function() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheetName;

    var e = arguments[0]; //argument[0] contains the event object

    //if else to handle the first case
    //if the event object is defined, it extract the sheetName associated to the triggerID in the ScriptProperties
    //otherwise take the active sheet
    if (!(e == undefined)){
        var scriptProperties = PropertiesService.getScriptProperties();
        sheetName = scriptProperties.getProperty(e.triggerUid);
    }else{
        var sheet = ss.getActiveSheet();
        sheetName = sheet.getSheetName();
    }

    var sheet = ss.getSheetByName(sheetName);
    //...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Google脚本:在工作表中的工作表之间复制数据-copyTo()不起作用

Google Apps脚本-setvalues在工作表上不起作用

下载后我的Google工作表中的脚本不起作用

Google 脚本代码在其他工作表中不起作用

用于将工作表中的事件添加到日历的 Google 脚本不起作用

优化Google脚本-触发器不起作用

Google电子邮件:触发工作表脚本的按钮/链接

Google工作表的查找/颜色脚本,循环外访问变量不起作用

在Google脚本的Google脚本内的特定工作表上使用onedit()触发器

如何复制Google工作表并保留其项目触发器和脚本?

Google App Scripts onOpen() 触发器在工作表上不起作用

在许多不同的表格(Google工作表)中使用一个Google脚本中的函数

Google脚本仅在工作日触发

使用脚本在 Google 工作表上隐藏不同的列?

如何使触发器脚本在Google表格中工作?

使用Google Spreadsheet中的脚本从许多不同的工作表中获取数据

Google Apps脚本toLocaleDateString不起作用

Google App脚本-setValues()不起作用

Google Apps脚本读取并匹配不同工作表中的单元格值

仅使用值和格式复制工作表的 Google 脚本

include 语句在 Google 脚本中不起作用

Google Apps脚本在Chrome中不起作用

范围输入以在Google Apps脚本中起作用

.setNumberFormat在Google Apps脚本中不起作用

Google App脚本onedit仅限工作表

Google工作表脚本超时错误

Google 工作表脚本标签颜色

Google脚本锁定如何工作?

在Google Apps脚本中触发importHTML