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