Фильтровать или скрыть строку
[Назад история] У меня есть Google Sheet, который я использую для рассылки расписаний субподрядчикам. Каждый субподрядчик имеет свой собственный лист, и у меня также есть один последний лист, который называется MasterSchedule.
В основном графике используются ссылки на все отдельные листы, так что все графики субподрядчиков являются видимыми. Хотя это слишком долго. Поэтому я включил вспомогательный столбец во все листы, который просто возвращаетправда или желожный указывает, должна ли строка отображаться или нет на мастере.
Тем не менее, строка по-прежнему отображается на главном сервере, но вспомогательный столбец просто говорит ложь. Поэтому я использовал Автофильтр, чтобы скрыть его.
TLDR:Проблема: Google Apps Script не имеет API для автоматического фильтра. Как VBA, используя критерии и т. Д. Так что единственный вариант, который я вижу, - это скрыть строки. Но это очень медленно. Я знаю, что идея состоит в том, чтобы уменьшить количество обращений к службам Google, и Google предлагает создать массив, а затем исключить вызов в массиве. Я понятия не имею, как это сделать.
Мне нужен эффективный скрипт / функция для просмотра столбца и каждой ячейки, которая читаетложный, функция скроет всю строку и покажет все остальные строки.
Самый быстрый способ без использования сценариев - использовать версию автофильтра Google Sheets и просто отменить проверкуложный.
Я попытался создать цикл for, который читает каждую ячейку в столбце и на каждой итерации скрывает строку, если значение ячейки равно false.Это невероятно медленно.
Видеть:
function MasterFilter() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var maxRows = sheet.getMaxRows();
//show all the rows
sheet.showRows(1, maxRows);
//get data from column B
var data = sheet.getRange('B:B').getValues();
//iterate over all rows
for(var i=5; i< data.length; i++){
if(sheet.getRange(i,2).getValue() == false){
sheet.hideRow(i);
}
}
}