Исключить лишние строки из условия

Выполняется скрипт по переносу заполненных данных из одной таблицы в другую.

  1. Как можно доработать его чтобы сверялись по столбцу C если там определенное значение, то эту строку переносить
  2. Исходя из первого пункта перенесенные строки нужно очистить (не удалять) и передвинуть оставшиеся чтобы строки шли подряд
 var sss = SpreadsheetApp.getActiveSpreadsheet();
 var ss = sss.getSheetByName('лист откуда тянем данные');
 var range = ss.getRange('A2:D51').getValues();
   var filtered = range.filter(function(r){
    return r.join("").length>0;
  });
 var filled_cells = ss.getRange('A2:A51').getValues().filter(String).length;
  
 var tss = SpreadsheetApp.openById('докс куда экспортируем');
 var ts = tss.getSheetByName('лист куда вставляем данные');

 if(filled_cells==0){

  }else{
 
 ts.getRange(ts.getLastRow()+2, 1, 1, 1).setValues([[new Date()]]);
 ts.getRange(ts.getLastRow(), 2,filled_cells,4).setValues(filtered);
 
 var ss = SpreadsheetApp.getActiveSpreadsheet();
      var data = ss.getSheetByName("лист откуда тянем данные");
      data.getRange("A2:D51").clearContent();
  }
 }

Как я понял эта часть проверяет только заполненные ячейки, не совсем понимаю как это доработать

   var filtered = range.filter(function(r){
    return r.join("").length>0;
  });
var filled_cells = ss.getRange('A2:A51').getValues().filter(String).length;

Следовательно тут будет чиститься не вся таблица, а те строки которые будут выгружены data.getRange("A2:D51").clearContent();


Ответы (1 шт):

Автор решения: Дмитрий ___

https://googlesheets.ru/delete-rows-by-sheets-api/ Кажется, этот материал полностью соответствует Вашему запросу. Вот фрагмент оттуда:

/**
 *  функция getRowsForDelete обращается к таблице.
 *  получает данные и опредеяет индексы (начиная с нуля) строк,
 *  которые нужно удалить. Возвращает массив с индексами для удаления.
 *  @returns {Array<number>} rowNumbersArr - массив индексов строк, соответсвующих условию.
 */
function getRowsForDelete() {
    /** Получаем инстанс таблицы */
    const table = SpreadsheetApp.getActive();
    /** Получаем все листы таблицы и берем первый
     * Можно получить лист по имени: table.getSheetByName('имя листа')
     */
    const sheet = table.getSheets()[0];
    /** Обращаемся к диапазону с данными на листе и получаем данные */
    const data = sheet.getDataRange().getValues();
    /** Определяем массив, в который будем класть индексы нужных строк*/
    const rowNumbers = [];
    /** В каждой строке проверяем значение из первого столбца*/
    data.forEach((row, i) => {
        if (row[0] == 'удалить') {
    /** И, если, значение соответсвует условию - добавляем индекс в массив*/
            rowNumbers.push(i);
        }
    })
    /** Возвращаем массив с индексами строк, которые соответсвуют условию */
    return rowNumbers;
}

→ Ссылка