К основному контенту

Удаление строк по условию

Часто возникает задача удаления строк из Таблицы Google по какому-либо условию.

Разнообразие условий так велико, что порой приходится создавать метод "удаления строк" снова и снова. Довольно утомительно. Для простых офсных скриптов можно применить сниппет, описанный ниже.

Основная идея заключается в том, чтобы взять весь массив данных и перебрать его в обратном порядке. При переборе каждая строка передается в функцию обратного вызова, которая принимет решение удалить строку или нет.

Для оптимизации количество последовательных строк суммируется, и для удаления применяется метод deleteRows(rowPosition, howMany) класса Sheet
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});
}
view raw deleteRows.gs hosted with ❤ by GitHub

В примере ниже скрипт удаляет строки автивного листа, в которых ячейки из диапазона D27:D77 и F27:F77 попарно пустые
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
deleteRows(sheet, function(row, i){
return 28 <= i && i <= 77 && !row[3] && !row[5];
});
}

Комментарии

  1. А если в таблице есть закрепленные строки ?

    ОтветитьУдалить
  2. Очень интересно. А где код?

    ОтветитьУдалить
    Ответы
    1. Кто ж его знает!? Хороший отработанный код есть в сниппетах https://apps-script-snippets.contributor.pw/snippets/sheets/delete_move_rows_by_conditional

      Удалить

Отправить комментарий

Популярные сообщения из этого блога

Триггеры Google Apps Script

Все триггеры в скриптах делятся по виду события, типу установки и области применения. Области применения Таблицы Формы Документы Сайты Автономные скрипты  События Open - происходит при открытии файла в приложении Гугл. Например, Формы создают это событие только при открытии в режиме редактирвоания. Edit - происходит при завершении ввода данных в ячейку Таблицы пользователем. Только Таблицы. Только пользователем. Install - автоматически вызывается при установке дополнения. Change - возникает при других (не изменение данных ячейки, например, назначение цвета или ширины колонки) изменених Таблицы вызванных пользователем. Только Таблицы. Только пользователем. Form submit - исполнится только тогда, когда придет ответ от респондента Формы. Time-driven - отложенный триггер действия, срабатывающий по истечении времени Get - событие отрабатывающее get-запросы к веб-приложению Post - событие отрабатывающее post-запросы к веб-приложению Типы установок Simple ...

Как открыть ссылку с помощью Google Apps Script?

Часто возникает задача, в которой требуется по результатам работы скрипта открыть ссылку в новом окне/вкладке браузера. В Google Apps Script не существует методов взаимодействия с браузером. Единственная более-менее реальная связь между пользователем и сервером скрипта находится в интерфейсе реализуемой программы. Это может быть Таблица, Документ или Web приложение. Все они реализуются через HtmlService. Например, SpreadsheetApp.getUi().showModelessDialog(htmlOutput, "title"); Понятно, что в построенном htmlOutput , можно выполнить код для текущего window . Например, window.open(url, "_blank"); Идея обернутая кодом ниже по тексту. Пользователь выбирает ячейку в Таблице (или все, что угодно, что формирует ссылку). На сервере На клиенте строится окно диалога, открывается новая вкладка браузера и закрывается окно диалога, при успешном выполнении условия. Иначе появляется сообщение, что переданный параметр не ссылка. Этот метод имеет существенный недостаток...