Триггер с управлением по времени, но возникают проблемы со ссылкой на лист

Попытка создать триггер для добавления метки времени в столбец, если эта строка была отредактирована в какой-то момент в тот же день. Это для работы, они считают, что onEdit слишком грязный. Я тоже не знаю.

Итак, у меня есть триггер, настроенный на запуск в 13:00 каждый день. Эта часть работает. Однако я не знаю, как сделать так, чтобы временная метка указывала на это инициированное событие, и я не знаю, как записать эту конкретную функцию. Вот что у меня есть, он попадает в десятую строку и говорит, что источник определен как null. Я ищу триггерUiD, который ему нужен, или что-то еще?

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);
  }
}

person gaggleogoogle    schedule 23.04.2019    source источник


Ответы (1)


Лист строки 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);
  }
}
person Cooper    schedule 24.04.2019