时间驱动的触发器,但是在引用工作表时遇到了麻烦

时间:2019-04-23 22:57:26

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

尝试创建触发器以将时间戳记添加到列中(如果该行在当天的某个时间点已被编辑)。对于工作,他们觉得onEdit太乱了。我也不知道。

因此,我将触发器设置为每天下午1点运行。那部分起作用。但是,我不知道如何使时间戳记的代码指向该触发事件,并且我也不知道如何写出该特定函数。这就是我所得到的,它到达了第十行,并说源被定义为null。我在寻找它需要的triggerUiD还是其他东西?

function myFunction(event) {
  var timeZone = Session.getScriptTimeZone();
  var timestamp_format = "MM-dd-yyy hh:mm:ss";
  var updateColName = "Updated";
  var timeStampColName = "Timestamp";
  var source = SpreadsheetApp.getActive().getSheetByName("TestTimestamp");
  var actRng = SpreadsheetApp.getActive().getActiveRange();
  var editColumn = actRng.getColumn();
  var index = actRng.getRowIndex();
  var headers = SpreadsheetApp.getActive().getSheetByName("TestTimestamp").getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var dateCol = headers[0].indexOf(timeStampColName);
  var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;
  if (dateCol > -1 && index > 1 && editColumn == updateCol) {
      var cell = sheet.getRange(index, dateCol +1);
      var date = Utilities.formateDate(new Date(), timezone, timestamp_format);
      cell.setValue(date);
  }
}

1 个答案:

答案 0 :(得分:0)

第10行工作表在var headers = SpreadsheetApp.getActive().getSheetByName("TestTimestamp").getRange(1, 1, 1, sheet.getLastColumn()).getValues();中未定义

您可以这样重写它:

function myFunction(event) {
  var ss=SpreadsheetApp.getActive();
  var timeZone = Session.getScriptTimeZone();
  var timestamp_format = "MM-dd-yyy hh:mm:ss";
  var updateColName = "Updated";
  var timeStampColName = "Timestamp";
  var source = ss.getSheetByName("TestTimestamp");
  var actRng = ss.getActiveRange();
  var editColumn = actRng.getColumn();
  var index = actRng.getRowIndex();
  var sheet=ss.getSheetByName('TestTimestamp'');
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  var dateCol = headers.indexOf(timeStampColName);
  var updateCol = headers.indexOf(updateColName); updateCol = updateCol+1;
  if (dateCol > -1 && index > 1 && editColumn == updateCol) {
    var cell = sheet.getRange(index, dateCol +1);
    var date = Utilities.formateDate(new Date(), timezone, timestamp_format);
    cell.setValue(date);
  }
}
相关问题