2016-01-22 5 views
0

Я создал простой лист задач в Листе Google, который позволяет пользователю вводить заметки. У меня есть 4-й столбец a Да/Нет проверки данных, если задача завершена или нет. Я написал код, который сохранит завершенные задачи на другом листе под названием «Back Log». Вот мой код:Цикл «За» не обрабатывает все строки данных

function Clear() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Main Note"); 
    var ss1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Back Log"); 
    var u; 
    var values = ss.getDataRange().getValues(); 
    var Rangecopy 
    var rowNum2 = ss1.getLastRow(); 
    var rowNum3 = rowNum2 +1 
    var Rangecopyto 
    var colNum = 4; 

    for (u=1;u<values.length +1;u++) { 
    if (ss.getRange(u,colNum).getValue() =="Yes") { 
     Rangecopy = ss.getRange(u,1,1,5) 
     Rangecopyto = ss1.getRange(rowNum3,1,1,5); 
     Rangecopy.copyTo(Rangecopyto); 
     Rangecopy.clearContent(); 
     rowNum3 = rowNum3 +1; 
    } 
    } 
} 

Код делает то, что я ожидаю, за исключением того, что он всегда оставляет последнюю запись нетронутой. Был бы признателен за любую помощь в выяснении причин. Я добавил +1 к значениям.length, который дает мне результат, который я искал, но я думаю, что может быть более правильный способ сделать это.

+0

Я получаю недопустимую ошибку диапазона, когда я меняю u в цикле for на 0. Я также добавил новая строка, чтобы сначала объявить значение u. Я отредактировал код, чтобы подумать об изменениях. –

ответ

1

Значения в двумерном массиве и номера строк в электронной таблице смещены на единицу. Строка одна в электронной таблице, это индекс 0 в массиве. Итак, вы должны приспособиться к этому. У вас есть строка заголовка, которую вы не хотите обрабатывать, поэтому вы должны начать отсчет в 2.

var u=2; 

for (u=2;u<values.length+1;u++) { 
    if (ss.getRange(u,colNum).getValue() =="Yes") { 
+0

Я меняю код на предыдущий, и теперь он удаляет самую первую строку, которая содержит заголовок каждого столбца, но все же оставляет последнюю строку нетронутой. Хотя это, вероятно, не идеальный способ, но я думаю, что получил его, добавив +1 к значениям.length. –

+0

См. Обновленный ответ. Запустите 'u' в 2 и добавьте 1 к длине. –

Смежные вопросы