Приложения Script onEdit для добавления / очистки временных меток на нескольких листах, если флажок установлен / снят

#google-apps-script #timestamp

#google-apps-script #временная метка

Вопрос:

У меня работает приведенный ниже скрипт, за исключением нижней части, начинающейся с //3. Начальная часть работает на моем первом листе в списке и добавляет метку времени, если флажок установлен, очищает его, если он снят. Однако он работает только на первом листе, и мне нужно, чтобы он работал и на втором листе, указанном в списке. Данные настраиваются по-разному на каждом листе, поэтому у меня они разбиты. Я был бы признателен за любые рекомендации, я очень новичок в Apps Script и обучении, поэтому я уверен, что это новичок и глупая ошибка:

 function onEdit(e) {
  
  var ss = SpreadsheetApp.getActiveSheet();
  var r = ss.getActiveCell();
  //1.Change 'Sheet1' to match your sheet name  
  if (r.getColumn() == 1 amp;amp; ss.getName()=='Sheet1') { // 2. If Edit is done in column 1 make change in column 4(D) then:
    var celladdress ='D'  r.getRowIndex();
    if(r.getValue() !="" amp;amp; r.getValue() !=" "){
      ss.getRange(celladdress).setValue(new Date()).setNumberFormat("MM/DD/YYYY hh:mm:ss");
    } else{
      ss.getRange(celladdress).clearContent();
}
//3.Change 'Sheet2' to to match your sheet name  
  if (r.getColumn() == 1 amp;amp; ss.getName()=='Sheet2') { // 4. If Edit is done in column (G) then:
    var celladdress ='G'  r.getRowIndex();
    if(r.getValue() !="" amp;amp; r.getValue() !=" "){
      ss.getRange(celladdress).setValue(new Date()).setNumberFormat("MM/DD/YYYY hh:mm:ss");
    } else{
      ss.getRange(celladdress).clearContent();
    }
  }
}
  }
 

Ответ №1:

Точки изменения:

  • В вашем скрипте я подумал, что можно использовать объект для поиска по имени листа.
    • В этой модификации var obj = {Sheet1: "D", Sheet2: "G"} используется.
    • Например, obj["Sheet1"] возвращает D . Это используется для измененного скрипта.
  • О флажке, вы также можете использовать isChecked() для проверки, установлен ли флажок.

Когда вышеуказанные пункты будут отражены в вашем скрипте, это будет выглядеть следующим образом.

Модифицированный скрипт:

 function onEdit(e) {
  var r = e.range;
  var ss = r.getSheet();
  
  // Prepare an object for searching sheet name.
  var obj = {Sheet1: "D", Sheet2: "G"};

  // Using the object, check the sheet and put or clear the range.
  if (r.getColumn() == 1 amp;amp; obj[ss.getSheetName()]) {
    var celladdress = obj[ss.getName()]   r.getRowIndex();
    if (r.isChecked()) {
      ss.getRange(celladdress).setValue(new Date()).setNumberFormat("MM/DD/YYYY hh:mm:ss");
    } else {
      ss.getRange(celladdress).clearContent();
    }
  }
}
 
  • В этом случае используется объект события. Но если вы хотите напрямую запустить функцию в редакторе сценариев, пожалуйста, измените следующим образом.
    • От
         var r = e.range;
        var ss = r.getSheet();
       
    • Для
         var ss = SpreadsheetApp.getActiveSheet();
        var r = ss.getActiveCell();
       

Ссылки:

Комментарии:

1. Большое вам спасибо! Я новичок, поэтому я не думаю, что повышение голосов пока работает для меня, но это определенно сработало.

2. @Chaz Спасибо за ответ и тестирование. Я рад, что ваша проблема была решена. И вам спасибо.