Часто возникает задача удаления строк из Таблицы Google по какому-либо условию.
Разнообразие условий так велико, что порой приходится создавать метод "удаления строк" снова и снова. Довольно утомительно. Для простых офсных скриптов можно применить сниппет, описанный ниже.
Основная идея заключается в том, чтобы взять весь массив данных и перебрать его в обратном порядке. При переборе каждая строка передается в функцию обратного вызова, которая принимет решение удалить строку или нет.
Для оптимизации количество последовательных строк суммируется, и для удаления применяется метод
В примере ниже скрипт удаляет строки автивного листа, в которых ячейки из диапазона D27:D77 и F27:F77 попарно пустые
Разнообразие условий так велико, что порой приходится создавать метод "удаления строк" снова и снова. Довольно утомительно. Для простых офсных скриптов можно применить сниппет, описанный ниже.
Основная идея заключается в том, чтобы взять весь массив данных и перебрать его в обратном порядке. При переборе каждая строка передается в функцию обратного вызова, которая принимет решение удалить строку или нет.
Для оптимизации количество последовательных строк суммируется, и для удаления применяется метод
deleteRows(rowPosition, howMany)
класса Sheet
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function deleteRows(sheet, condition){ | |
var values = sheet.getDataRange().getValues(); | |
values.unshift([]); | |
values.reverse().forEach(function(){ | |
var i = this.l - arguments[1]; | |
if(this.condition.apply(null, [arguments[0], i, arguments[2]])){ | |
this.isContinue++; | |
} else if(this.isContinue) { | |
this.sheet.deleteRows(i, this.isContinue); | |
this.isContinue = 0; | |
} | |
}, {sheet: sheet, condition: condition, isContinue: 0, l: values.length}); | |
} |
В примере ниже скрипт удаляет строки автивного листа, в которых ячейки из диапазона D27:D77 и F27:F77 попарно пустые
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function myFunction() { | |
var sheet = SpreadsheetApp.getActiveSheet(); | |
deleteRows(sheet, function(row, i){ | |
return 28 <= i && i <= 77 && !row[3] && !row[5]; | |
}); | |
} |
А если в таблице есть закрепленные строки ?
ОтветитьУдалитьПо идее должно работать.
УдалитьОчень интересно. А где код?
ОтветитьУдалитьКто ж его знает!? Хороший отработанный код есть в сниппетах https://apps-script-snippets.contributor.pw/snippets/sheets/delete_move_rows_by_conditional
Удалить