Исключить лишние строки из условия
Выполняется скрипт по переносу заполненных данных из одной таблицы в другую.
- Как можно доработать его чтобы сверялись по столбцу C если там определенное значение, то эту строку переносить
- Исходя из первого пункта перенесенные строки нужно очистить (не удалять) и передвинуть оставшиеся чтобы строки шли подряд
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;
}