2016-02-17 3 views
1

Я пытаюсь получить цикл в скрипте листинга Google, который будет искать столбец A для текстовой строки: «x» и очистить соседние ячейки в столбцах B-X и AC-AH.Google листы петли ищут строку и очищают соседние ячейки

Edit: К сожалению забыл сказать, что я сделал ...

My Excel VBA макрос выглядит следующим образом:

Dim rng1 As Range 
    Dim rng2 As Range 
    Set rng1 = ActiveSheet.Range("a11:a50") 

    For Each rng2 In rng1 
     If rng2 = "x" Then rng2.Offset(0, 1).Resize(, 23).ClearContents 
    Next 
    Dim rng3 As Range 
    Dim rng4 As Range 
    Set rng3 = ActiveSheet.Range("a11:a50") 

    For Each rng4 In rng3 
     If rng4 = "x" Then rng4.Offset(0, 28).Resize(, 6).ClearContents 
    Next 

Я нашел этот сценарий при условии Саймон Staton (here), но это удалить всю строку, и я не хочу, чтобы удалить строку, просто очистить некоторые содержимое в нем:

/* Delete rows */ 
function deleteRows() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var rows = sheet.getDataRange(); 
    var numRows = rows.getNumRows(); 
    var values = rows.getValues(); 

    var toDelete = []; 

    for (var row = 0; row < values.length; row++) { 
    for(var column = 0;column<values[row].length;column++){ 
     if (values[row][column].indexOf("WordThatExistsInOneRow") > -1){ 
     toDelete.push(row); 
     } 
    } 
    } 

    for(var deleteRow = toDelete.length-1; deleteRow >= 0;deleteRow--){ 
    sheet.deleteRow(toDelete[deleteRow]+1); 
    } 

    SpreadsheetApp.flush(); 
}; 

РЕЗУЛЬТАТ: Вот что я закончил, благодаря ответу Эд Нельсон быть низкий ... Я должен был Твик это начать в строке 11, а не самый первый ряд:

function copyfeb() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    var lr = sheet.getLastRow() 
    var lc = sheet.getLastColumn() 
    var a = sheet.getRange(11, 1, lr, lc).getValues(); 
    for (var i = 0; i < a.length-1; i++) { 
      if (a[i][0].indexOf("x")!= -1){ 
      var delete1=sheet.getRange(i+11, 1, 1, 24) 
      var delete2=sheet.getRange(i+11, 29, 1, 6) 
      delete1.clearContent() 
      delete2.clearContent() 
    }} 
} 
+0

Добро пожаловать в StackOverflow! Каковы ваши усилия по решению этой задачи? Также читайте [здесь] (http://stackoverflow.com/help/how-to-ask) о том, как задавать хорошие вопросы о stackoverflow. – marktani

+0

Спасибо, я отредактировал мой пост, работает ли это нормально? – StacyZoo

ответ

0

Попробуйте это:

function deleteRows() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var lr=sheet.getLastRow() 
    var lc=sheet.getLastColumn() 
    var a = sheet.getRange(2, 1, lr, lc).getValues(); 
    for (var i = 0; i < a.length-1; i++) { 
      if (a[i][0].indexOf("x")!= -1){ 
      var delete1=sheet.getRange(i+2, 2, 1, 23) 
      var delete2=sheet.getRange(i+2, 29, 1, 6) 
      delete1.clearContent() 
      delete2.clearContent() 
    }}} 
+0

Это полностью сработало! Спасибо огромное! Честно говоря, когда я читал код, я не был уверен, но он работает :-) Очень ценю это, спасибо! – StacyZoo

+0

О, стреляй! Так что извините, это работает, но мне нужен поиск, чтобы начать с строки 11, а не с самой первой строки листа .... Я попытался: var a = sheet.getRange (11, 1, lr, lc) .getValues(); ... но он игнорирует некоторые х в нижней части списка ... – StacyZoo

+0

Подождите, я исправил его :-) Вот что я сделал: function deleteRows() { var sheet = SpreadsheetApp.getActiveSheet(); var lr = sheet.getLastRow() var lc = sheet.getLastColumn() var a = sheet.getRange (11, 1, lr, lc) .getValues ​​(); для (var i = 0; i StacyZoo

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