Автоматическая временная метка электронной таблицы Google: мне не нужна метка времени при удалении содержимого ячейки

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

function onEdit() {
  
  var COLUMNTOCHECK = 1;
  var DATETIMELOCATION = [0,1];
  var SHEETNAME = 'STOCKOUT' 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  
  if( sheet.getSheetName() == SHEETNAME ) { 
    var selectedCell = ss.getActiveCell();
    if( selectedCell.getColumn() == COLUMNTOCHECK) { 
      var balance = sheet.getRange("i1").getValue();
      var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
      dateTimeCell.setValue([balance]);
      }
  }

Вот пример:

Когда я обновляю столбцы A и C и пытаюсь удалить A, B , C, I, скрипт, который он запустит и вставит новое значение в столбец B Пример электронной таблицы Google

1
задан player0 18 March 2019 в 00:01
поделиться

2 ответа

Попробуйте:

function onEdit(e) {  
  if( e.range.getSheet().getName()=='STOCKOUT' && e.range.columnStart==1) {
      e.range.offset(0,1).setValue((e.value)?e.range.getSheet().getRange("I1").getValue():'');
  }else{
    return;
  }
}
0
ответ дан Cooper 18 March 2019 в 00:01
поделиться

Как насчет этой модификации? Когда значение удаляется из ячейки, объект события e из onEdit(e) имеет e.value.oldValue. Используя это, ваш скрипт может быть написан следующим образом.

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

function onEdit(e) { // Modified
  if (!e.value.oldValue) { // Added
    var COLUMNTOCHECK = 1;
    var DATETIMELOCATION = [0,1];
    var SHEETNAME = 'STOCKOUT' 
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();

    if( sheet.getSheetName() == SHEETNAME ) { 
      var selectedCell = ss.getActiveCell();
        if( selectedCell.getColumn() == COLUMNTOCHECK) { 
        var balance = sheet.getRange("i1").getValue();
        var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
        dateTimeCell.setValue([balance]);
      }
    }
  }
}

Ссылка:

Если я неправильно понял ваш вопрос и это Я не прошу прощения.

Редактировать:

Я подумал 3 ситуации для редактирования ячейки.

  1. Значение помещается в пустую ячейку.

    • e.value включены в объект события.
      • oldValue не включено в e.value.
    • e.oldValue не включено в объект события.
  2. Существующее значение ячейки редактируется.

    • e.value и e.oldValue включены в объект события.
      • oldValue не включено в e.value.
  3. Значение удалено из ячейки.

    • e.value и e.oldValue включены в объект события.
      • oldValue включено в e.value.

Я думал, что шаблон 3 можно использовать для ситуации ОП .

0
ответ дан Tanaike 18 March 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: