Этот код работает для обновления значений для даты «обновления» и состояния в столбцах на другом листе, где совпадает значение столбца «keyid». Запуск по расписанию с проверкой данных испытаний на даты в течение последних 5 дней. Для тех элементов, которые попадают в этот диапазон дат, обновите эти элементы на целевом листе с новой обновленной датой и новым статусом.
Добавлено Примечание. Функция updateExistingRows () - это только один шаг, вызываемый из основной функции, которая запускается из синхронизированного триггера. У основной функции есть шаг, который запускает сохраненный процесс на сервере SQL, чтобы обновлять основную рабочую таблицу при каждом запуске процесса (очищает его и заполняет его).
Мне потребовалось немного времени, чтобы понять, мне было любопытно, есть ли лучший способ использовать скрипт приложений для проверки изменений между листами и выполнения обновлений. Листы не имеют одинаковые столбцы данных. В большинстве примеров я нашел, где добавлять строки, чтобы не обновлять определенные элементы в строке.
Примечание. Если я не добавлю +1 к этим строкам:
targetTab.getRange(n+1,8)
это записало значение в строке выше на моем целевом листе. Вот мой код:
function updateExistingRows() {
var date = new Date();
var sss = SpreadsheetApp.openById('xxxxxxxx');
var sourceTab = sss.getSheetByName('Sheet1');
var srcrg = sourceTab.getDataRange();
var srcvA = srcrg.getValues();
var tss = SpreadsheetApp.openById('yyyyyyyy');
var targetTab = tss.getSheetByName('Sheet3');
var tarrg = targetTab.getDataRange();
var tarvA = tarrg.getValues();
var source_data = sourceTab.getDataRange().getValues();
var target_data = targetTab.getDataRange().getValues();
for (var n = 1 ; n < source_data.length ; n++) {
if (source_data[n][11] >= new Date(date.getTime()-5*(24*3600*1000)) ) {
if (source_data[n][8] = target_data[n][5]) {
var new_updated = source_data[n][11];
var new_status = source_data[n][13];
targetTab.getRange(n+1,8).setValue(new_updated);
targetTab.getRange(n+1,10).setValue(new_status);
}
}
}
}