2015-09-04 2 views
1

У меня есть лист данных, который содержит информацию, которая затем направляется на другой лист на основе опции, выбранной в раскрывающемся меню. Я создал сценарий, который делает это, удалив строку на основе строки, выбранной в раскрывающемся списке, и скопирует ее на новый лист, когда в листе данных нажата кнопка. Однако, когда он встречает строку, которая не соответствует строке, которую я ищу, она останавливается.Скрипт Google Apps - Цитирование по диапазону ячеек, ищущих значения

Ниже приведен образец кода, который у меня есть до сих пор.

function sendUpdates() 
{ 
    var sheetNameToWatch = "Data Report"; 
    var sheetNameToDelete = "Hidden - Data Report; 
    var valueToWatch = "Send to XXX"; 
    var sheetNameToMoveTheRowTo = "Hidden - New - Data Report"; 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var range = sheet.getRange("O2:O50"); 
    SpreadsheetApp.setActiveRange(range); 

    for (;range.getValue() == valueToWatch;) 
    { 
    var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo); 
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    var deleteSheet = ss.getSheetByName(sheetNameToDelete) 
    sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).copyTo(targetRange, {contentsOnly: true}); 
    sheet.deleteRow(range.getRow()); 
    deleteSheet.deleteRow(range.getRow()); 
    } 


} 

Я хотел бы, чтобы он мог продолжить до конца, если возможно, до конца? Любая помощь действительно ценится.

+0

I-й чернила, я знаю, для чего ты идешь. Не могли бы вы разместить образец документа с правильной структурой? Я хочу, чтобы мой код соответствовал вашим шаблонам организации. – Brian

+0

Привет, Брайан, я не могу поделиться образцом документа, к сожалению, поскольку данные слишком чувствительны. Если бы вы могли привести пример в любом случае, это было бы здорово, если бы не спасибо за вашу помощь. – cday

ответ

0

Изменить ваш цикл от:

for (;range.getValue() == valueToWatch;) 

To:

var i = 0, 
    numberOfRowsInRange = range.getNumRows(); 

for (i=0;i<numberOfRowsInRange;i+=1) 
+0

Спасибо, Сэнди, это работает с точки зрения циклизации по диапазону, но он все еще только получает значение, если он находится в первой ячейке. Я обновил свой код, чтобы включить цикл for, который вы предложили. 'code for (i = 0; i cday

1

вместо

if (range.getValue() == valueToWatch) {} 

попробовать

if(dataRange.getCell(0, i).getValue() == valueToWatch) {} 
Смежные вопросы