【问题标题】:Time Trigger not running时间触发器未运行
【发布时间】:2015-10-19 19:51:46
【问题描述】:

我的时间触发器不让 onEdit 运行。如果我删除触发器并编辑 Google 工作表 onEdit 将起作用。 但是,当我希望 onEdit 每分钟运行一次时,它就不会运行。 这里是my sheetscript

function setTrigger() {
    ScriptApp.newTrigger("MOVE")
        .timeBased()
        .everyMinutes(1)
        .create();
}

function onOpen() {
    SpreadsheetApp.getUi().createMenu('My Menu')
        .addItem('MOVE', 'onEdit')
        .addToUi()
}




function onEdit() {
  // assumes source data in sheet named Needed
  // target sheet of move to named Acquired
  // test column with yes/no is col 4 or D
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var r = s.getActiveRange();



  if(s.getName() == "Load Board" && r.getColumn() == 3 && r.getValue() == "Closed") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Closed");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }

}

【问题讨论】:

  • 好吧,我没有看到“MOVE”功能的一个原因 - 这只是您在菜单中给 onEdit 的名称。其次,您为什么不能使用触发器按钮创建它?好像你只创建一次。第三,我认为您可能会在使用时间触发器运行使用 get ActiveSheet 和 getActiveRange 的函数时遇到问题,因为它运行时不会有活动工作表或范围......
  • 我尝试从触发按钮添加,问题是:由于 onEdit 设计为在您直接编辑工作表时运行(运行良好)。就我而言,AppSheet(第三方软件)将编辑电子表格,而 onEdit 并没有运行。我想如果我在脚本中添加触发器可能会有所帮助。
  • @JensAstrup 如何将 onEdit 设置为时间触发器?

标签: google-apps-script google-sheets


【解决方案1】:

根据我对您的 cmets 对先前答案的解释,我给您此代码(编辑了我自己先前的答案)。 (虽然我不知道 AppSheet,所以您可能会要求更多/不同)。

下面的代码将“移动”所有满足条件的行(第 3 列 == 'Closed')。满足条件后,可以通过所有三种方式启动“移动”: 手动编辑工作表; 单击工作表的我的菜单; 或通过触发器计时器(触发器本身可以由代码设置或在脚本界面中手动设置)。

请注意,onEdit 函数可以简单地调用函数 move(),而不是调用它自己的代码来执行移动(在这种情况下,不需要 onEdit 中的大部分代码)。我已经在代码中留下了注释。(我不知道哪个是更好的方法。)

function setTrigger() { // Note: 1 this could be set manually; 2) There needs to be a 'move' function which I have created; this trigger could equally be set to trigger onEdit every minute instead and, due to the function call in the onEdit funtion, would effect the same result, as can be seen by the onOpen menu item calling onEdit directly.
  ScriptApp.newTrigger("move")
  .timeBased()
  .everyMinutes(1)
  .create();
}

function move(){ 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('Load Board');
  var values = s.getDataRange().getValues();
  var counter = 0; // not part of process, simply here for counting what's happening for inspection if required
  var targetSheet = ss.getSheetByName("Closed");
  for (var i = values.length -1 ; i>=0  ; i--){
    Logger.log('loop number: ' + i + ' gives value in column 3 = ' + values[i][2] );
    if(values[i][2] == "Closed"){
      targetSheet.appendRow(values[i]);
      s.deleteRow(i+1)
      counter++
    }
  }
  if(counter > 0)
    PropertiesService.getScriptProperties().setProperty('MOVE_INDICATOR', counter +' rows moved at ' + new Date()); // merely gives you a log of the last update
}

function onOpen() {
  SpreadsheetApp.getUi().createMenu('My Menu')
  .addItem('MOVE', 'onEdit')
  .addToUi()
}

function onEdit(e){
  if(e === undefined){ // note, just for testing, if you change this line to if(e){   then this remainder of this function is redundant since function move() is called and does a similar job.
    move();
    return
  }
  var ss = e.source;
  Logger.log(ss.getName() ) // You can inspect the logger to see what is happening.
  var s = e.source.getActiveSheet() // active tab in spreadsheet
  Logger.log(s.getName() )
  var r = e.range; // active range}

  if(s.getName() == "Load Board" && r.getColumn() == 3 && r.getValue() == "Closed")
  {
    var row = r.getRow();
    var numColumns = ss.getLastColumn();
    var targetSheet = ss.getSheetByName("Closed");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);}
}

function deleteProps(){ // here just to clear down the PropertiesService
  PropertiesService.getScriptProperties().deleteAllProperties();
}

【讨论】:

  • 谢谢,您看到前 3 个条目已“关闭”,但它们仍然存在。如果我从工作表本身进行编辑,脚本工作正常,但我正在使用“AppSheet”编辑/更新工作表这不会让触发器或函数运行
猜你喜欢
  • 2016-10-23
  • 2020-12-24
  • 2014-11-20
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多