Задать вопрос
  • Как можно выводить изменения ячейки в гугл таблицах?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Нужно отслеживать событие onEdit(event) и писать лог в нужный лист.
    function onEdit(event) {
      //Возникает при изменении ячейки
      var ss = event.source.getActiveSheet();//Текущий лист
      var address = event.range.getA1Notation().toUpperCase();//Адрес ячейки
      var row = event.range.getRow();      //Номер строки
      var col = event.range.getColumn();  //Номер столбца
      var newValue = event.value;            //Новое значение
      var oldValue = event.oldValue;        //Старое значение
      
      if (["Лист1","Лист2"].indexOf(ss.getName())==-1) return;	//Указываем на каких листах должен работать скрипт
      //Можно при желании ещё фильтровать по строке/столбцу (row/col), или по старому/новому значению (oldValue/newValue)
      
      var archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Архив");
    
      archive.getRange(archive.getLastRow()+1, 1).setValue(
        formatDateTime(new Date())+" " + "[" + ss.getName() + "!" + address + "] '" + (oldValue==undefined?"":oldValue) + "' >> '" + (newValue==undefined?"":newValue) +"'"
      );
    };
    
    function formatDateTime(date) {
    
      var dd = date.getDate();
      if (dd < 10) dd = '0' + dd;
      var mm = date.getMonth() + 1;
      if (mm < 10) mm = '0' + mm;
      var yy = date.getFullYear() % 100;
      if (yy < 10) yy = '0' + yy;
      
      var hh = date.getHours();
      if (hh < 10) hh = '0' + hh;
      var MM = date.getMinutes();
      if (MM < 10) MM = '0' + MM;
      var ss = date.getSeconds();
      if (ss < 10) ss = '0' + ss;
      
      return dd + '.' + mm + '.' + yy + ' ' + hh + ':'+ MM + ':'+ ss;
    }

    Вот ссылка на демо
    Ответ написан
    4 комментария