编辑触发的时间戳触发得不够快

时间:2018-10-03 17:03:41

标签: google-apps-script google-sheets triggers timestamp

我有一个Google表格,有15个人在处理它。每当将数据输入到Q列时,我都会使用以下脚本向X列添加时间戳记:

var COLUMNTOCHECK = 17;
var DATETIMELOCATION = [0, 6];
var SHEETNAME = 'Requires Review'

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  if (sheet.getSheetName() == SHEETNAME) { 
    var selectedCell = ss.getActiveCell();
    if (selectedCell.getColumn() == COLUMNTOCHECK) { 
      var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0], DATETIMELOCATION[1]);
      dateTimeCell.setValue(new Date(new Date().setHours(0, 0, 0, 0)))
                  .setNumberFormat('MM/d/yy');
    }
  }
}

该脚本有效,但并非始终如此。我想这是因为在某些情况下,有多个用户同时在Q列中进行编辑,并且脚本无法跟上。有没有办法来解决这个问题?有没有办法使另一个脚本执行与上述相同的操作,但是它代替编辑触发器,而是每分钟左右运行一次,并将时间戳记批量添加到已填充的Q列中的所有单元格中?

1 个答案:

答案 0 :(得分:0)

尝试此代码,因为它将使用已经包含活动范围的事件对象e,所以运行速度会更快:

var COLUMNTOCHECK = 17;
var DATETIMELOCATION = [0, 6];
var SHEETNAME = 'Requires Review'

function onEdit(e) {
  if (e.range.getSheet().getName() == SHEETNAME) { 
    if (e.range.getColumn() == COLUMNTOCHECK) { 
      var dateTimeCell = e.range.offset(DATETIMELOCATION[0], DATETIMELOCATION[1]);
      dateTimeCell.setValue(new Date(new Date().setHours(0, 0, 0, 0)))
                  .setNumberFormat('MM/d/yy');
    }
  }
}

或使用时间触发器每x分钟/小时激活一次功能。在此示例中,您只需执行一次createTrigger

var COLUMNTOCHECK = 17;
var DATETIMELOCATION = [0, 6];
var SHEETNAME = 'Requires Review'

function createTrigger()
{
  ScriptApp.newTrigger("myFunction")
    .timeBased()
    //triggers every 2 hours
      .everyHours(2)
        .create();
}

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(SHEETNAME);
  //then grab the correct range and set Values
    }
  }
}