Считывание старых значений в диапазоне ячеек Google Scripts. oldValues

Подскажите, пожалуйста.

Есть скрипт, который работает на onEdit. Он добавляет в строку изменения из другого листа Например, если были изменения в Лист1 в ячейке А1, то он отметит старое значение и на что оно поменялось

Лист1 А1 40>>50

Проблема: при изменении массива ячеек (копировать-вставить) эти данные не учитываются вместо старых и новых значений прочерки

Лист1 А1:А22 "">>""

Попытался исправить это, добавив скрипт, который бы подставлял значения. Аналог ВПР в скриптах. Его первый скрипт просто не считывает

Пробовал также формулы, но первый скрипт их так же не распознаёт

Что можно сделать, чтобы первый скрипт распознавал вставленные массивы данных и отображал их?

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 (col === 3 && ss.getName() === "Лист1")

  
  var archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Лист1");

  archive.getRange(row, 6).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;
}
  function VPR() {
  const ss = SpreadsheetApp.getActiveSpreadsheet()
  const wsSalesData = ss.getSheetByName("Лист1")
  const wsRates = ss.getSheetByName("ВЫгрузка")

  const ratesData = wsRates.getRange(2,1,wsRates.getLastRow()-1,3).getValues() //Сбор инфы

  const searchValues = wsSalesData.getRange("A2:A33").getValues()

  const matchingRates = searchValues.map(searchRow => {
    const matchRow = ratesData.find(r => r[0] == searchRow[0])
    return matchRow ? [matchRow[2]] : [""]
  })
  
  
  //console.log(matchRow)
  wsSalesData.getRange("C2:C33").setValues(matchingRates)
}

Ответы (1 шт):

Автор решения: TheIrishMan

Триггер onEdit не улавливает изменения, если они были сделаны вставкой (Ctrl+c, Ctrl+V). Для таких задач можно использовать хранение данных в кэше, к примеру, и уже оттуда доставать данные и сравнивать их со старыми. Как вариант на втором листе можно использовать IMPORTRANGE

→ Ссылка