我需要:
基本上是这样的:
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] 删除。
我来说两句