我希望我的函数freezeSunday
能在周日下午1点的时候运行。由于您似乎无法触发一个函数在一个精确的时间(仅在一个范围内随机选择的时间)运行,所以我编写了以下代码。
function createTimeTriggerEveryNMinutes() {
ScriptApp.newTrigger("freezeSunday")
.timeBased()
.everyMinutes(1)
.create();
}
function freezeSunday() {
const date = new Date();
const minute = date.getMinutes();
if (minute == 0) {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A37:Z69').activate();
spreadsheet.getRange('A2:Z34').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
}
}
function triggerDeleteHandler() {
var Triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < Triggers.length; i++) {
if (Triggers[i].getHandlerFunction() == "freezeSunday") {
ScriptApp.deleteTrigger(Triggers[i])
}
}
}
第一个函数设置freezeSunday
函数每分钟运行一次的触发器。freezeSunday函数仅在分钟为0时执行其操作。否则它什么也做不了。最后一个函数删除“每时每刻”触发器。如果我手动运行第一个函数createTimeTriggerEveryNMinues
,所有这些都可以正常工作。freezeSunday函数每分钟运行一次,下午1点执行它的操作。
但是,如果我设置了一个触发器来运行createTimeTriggerEveryNMinutes
,而不是手动地运行它,那么事情就不起作用了。freezeSunday
函数从未运行,触发器在我的触发器列表中以红色文本显示“禁用”。如果我点击信息图标,上面写着“因未知原因禁用触发器”。
不允许从另一个触发函数为函数设置触发器吗?
发布于 2022-05-20 04:12:07
替换
spreadsheet.getRange('A37:Z69').activate();
spreadsheet.getRange('A2:Z34').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
通过
spreadsheet.getRange('A2:Z34').copyTo(spreadsheet.getRange('A37:Z69'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
这是因为时间驱动触发器无法激活范围,因为这是在Google用户界面中完成的。
发布于 2022-05-22 00:27:13
我想我已经发现了这个问题。在下面的代码中,如果我使用createDoubleTrigger函数为createTimeTriggerEveryNMinutes和triggerDeleteHandler创建触发器,一切都会正常工作。
如果我使用Apps脚本界面中的下拉菜单为createTimeTriggerEveryNMinutes和triggerDeleteHandler创建触发器,那么freezeSunday就不会运行,由createTimeTriggerEveryNMinutes创建的触发器显示为“禁用”。
我认为一般的解决方案是始终以编程方式创建触发器。
function createDoubleTrigger() { ScriptApp.newTrigger("createTimeTriggerEveryNMinutes") .timeBased() .onWeekDay(ScriptApp.WeekDay.SUNDAY) .atHour(12) .nearMinute(40) .everyWeeks(1) .create(); ScriptApp.newTrigger("triggerDeleteHandler") .timeBased() .onWeekDay(ScriptApp.WeekDay.SUNDAY) .atHour(13) .nearMinute(20) .everyWeeks(1) .create(); } function createTimeTriggerEveryNMinutes() { ScriptApp.newTrigger("freezeSunday") .timeBased() .everyMinutes(1) .create(); } function freezeSunday() { const date = new Date(); const minute = date.getMinutes(); if (minute == 0) { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getRange('A2:Z34').copyTo(spreadsheet.getRange('A37:Z69'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); } } function triggerDeleteHandler() { var Triggers = ScriptApp.getProjectTriggers(); for (var i = 0; i < Triggers.length; i++) { if (Triggers[i].getHandlerFunction() == "freezeSunday") { ScriptApp.deleteTrigger(Triggers[i]) } } }
https://webapps.stackexchange.com/questions/164647
复制相似问题