【发布时间】:2018-08-07 09:33:37
【问题描述】:
我需要:
- 创建新工作表
- 调用主函数
- 设置将调用主函数的触发器
基本上是这样的:
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);
}
【问题讨论】:
-
您不能将参数传递给触发函数 - Google 会这样做(作为传递事件对象的一部分)。但是,您可以使用触发器 ID 和 PropertiesService 来存储 ID 和它应该使用的工作表之间的映射。
-
感谢您的回答! :) 我找到了这个,但我不知道如何在我的情况下使用它。 stackoverflow.com/questions/33360803/… 如何获取触发器 ID 以及如何将其映射到工作表?对不起,但我是新手。代码(也简化)将不胜感激! :)
-
您从创建的触发器中获取触发器 ID:developers.google.com/apps-script/reference/script/trigger 您通过设置键和值来使用
PropertiesService- 值将是您的函数需要的参数,键是触发器ID。在触发函数中,您使用事件对象并在事件对象中查找触发器 ID 的存储值。关于触发器、事件对象和属性服务的 Apps 脚本文档应该包含编写脚本所需的内容 - 一旦您愿意分享,您可以获得更好的帮助。 -
非常感谢!非常感谢您的帮助!我用更改的代码更新了原始问题。但是仍然存在一个问题。你说要使用事件对象,所以我应该这样做:
event.triggerUid问题是我不知道如何找到事件对象,文档做了一个接收事件对象的示例。 developers.google.com/apps-script/guides/triggers/events如何调用事件对象?谢谢!! :) -
您的触发函数(例如
main_function、onEdit等)会自动接收事件对象作为输入参数。您可以在触发函数中将其称为arguments[0],或者,如果您指定了参数名称,则可以使用该参数名称(例如function foo(evobj) { /** code */}中的evobj)。每次触发器激活时,Google 都会处理创建事件对象。
标签: google-apps-script triggers