Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 在谷歌应用程序脚本中设置计时器_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 在谷歌应用程序脚本中设置计时器

Google apps script 在谷歌应用程序脚本中设置计时器,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我试图设置一个计时器,当一个单元格在工作表中编辑时,它将持续24小时。如果24小时未编辑,则必须锁定该行;如果在24小时之前对计时器进行编辑,则必须将其重置为24小时。谷歌应用程序脚本编程新手;如有任何建议,将不胜感激 function onEdit(e) { var range = e.range; range.setNote('Last modified: ' + new Date()); ScriptApp.newTrigger("functionToLockCells&quo

我试图设置一个计时器,当一个单元格在工作表中编辑时,它将持续24小时。如果24小时未编辑,则必须锁定该行;如果在24小时之前对计时器进行编辑,则必须将其重置为24小时。谷歌应用程序脚本编程新手;如有任何建议,将不胜感激

function onEdit(e) {

var range = e.range;
range.setNote('Last modified: ' + new Date());
ScriptApp.newTrigger("functionToLockCells").timeBased().after(24 * 60 *60 * 1000).create()

var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
  if (   triggers[i].getHandlerFunction() == "functionToLockCells") {
  ScriptApp.deleteTrigger(triggers[i]);
}}
}

function functionToLockCells() {
  //First cell to lock
  var col = 1;
  // Get last row with data in sheet
  var lastRow = sheet.getLastRow();
  //Loop until last row in sheet is passed
  lockRange(lastRow, col);
}
函数onEdit(e){
var范围=e范围;
range.setNote('上次修改:'+新日期());
ScriptApp.newTrigger(“functionToLockCells”).timeBased().after(24*60*60*1000.create()之后
var triggers=ScriptApp.getProjectTriggers();
对于(var i=0;i
您可以在
onEdit()
函数中添加一段代码,该代码创建一个计划的一次性触发器,以执行在编辑单元格后24小时内锁定单元格的功能

ScriptApp.newTrigger("functionToLockCells")
.timeBased()
.after(24 * 60 *60 * 1000)
.create()
}
如果在24小时内编辑此单元格,则可以使用以下代码删除此触发器:

var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
  if (   triggers[i].getHandlerFunction() == "functionToLockCells") {
    ScriptApp.deleteTrigger(triggers[i]);
  }}
var triggers=ScriptApp.getProjectTriggers();
对于(var i=0;i
并再次使用此答案中的第一个代码段创建一个新的


该过程可能如下:编辑感兴趣的单元格时,删除活动触发器并创建一个新触发器,该触发器将在24小时后执行该功能。如果24小时过去了,单元格将被锁定,因此可以/不应该再对其进行编辑。因此,只需将触发器删除部分(第二个代码段)放在触发器创建代码(第一个代码段)之前,就可以了。

我已经在问题中粘贴了我编辑的脚本。如果在24小时内进行编辑,则不会创建新触发器。该代码创建并立即删除触发器。请只尝试我答案的第一个代码。只需创建它,看看它是否被创建。事实上,没有,我在第3行得到一个错误:“无法读取未定义的属性范围”您没有运行onEdit函数。您只需编辑一个单元格,它就会运行。@user3447653只需编辑一个单元格,看看它是否有效。单击项目的触发器列表,查看是否创建了触发器。