Я попытался упростить задачу и проверить два элемента - мобильный (MOBILE_COL
) и перешел к отправителю (MOVED_TO_SENDER_COL
) вне цикла.Они определены сверху, чтобы учесть любые будущие изменения, такие как MOVED_TO_SENDER
.
Затем получаем userTab
весь диапазон и значения листа.И сравнивая значения, как показано в приведенном выше коде, строка за строкой, чтобы найти новую строку, которая не была добавлена ранее.
Когда новая строка найдена, добавьте ее в массив results
и обновите добавленное значение этой текущей строки до «Да».Как только у нас есть все новые строки в массиве results
, мы записываем их в senderTab
.И обновите userTab
с обновленным userValues
.
Хитрость здесь в том, чтобы собрать все новые строки и записать их вместе за один раз.Это быстрее, чем писать построчно.Тот же метод применяется при обновлении userTab
.Мы обновляем userValues
, который находится в памяти, и, наконец, за один раз записываем весь массив на шаг userTab
.
function dumpSMSintoSender() {
// value to check for
var MOVED_TO_SENDER = 'Yes';
// which column is mobile, which is first item to test
var MOBILE_COL = 4; // A = 1, B = 2 etc
// which column is move to sender = appended, which is second item to test
var MOVED_TO_SENDER_COL = 8; // A = 1, B = 2 etc
var ss = SpreadsheetApp.getActiveSpreadsheet();
var userTab = ss.getSheetByName('SmartCare');
var senderTab = ss.getSheetByName('Sheet1');
// getting userTab full sheet range and values
var userRange = userTab.getDataRange();
var userValues = userRange.getValues();
// array to keep new append-able rows
var results = [];
// for each row in userValues check to see if append-able
// if yes, add to results array and update userValues array by setting appended to 'Yes'
userValues.forEach(function(row) {
if (row[MOBILE_COL - 1] != '') {
if (row[MOVED_TO_SENDER_COL - 1] != MOVED_TO_SENDER) {
results.push(row);
row[MOVED_TO_SENDER_COL - 1] = MOVED_TO_SENDER;
}
}
});
// write new rows to senderTab
senderTab
.getRange(senderTab.getLastRow() + 1, 1, results.length, results[0].length)
.setValues(results);
// update userTab
userRange.setValues(userValues);
}