Filtruj lub ukryj wiersz

[Back story] Mam arkusz Google, którego używam do wysyłania harmonogramów do podwykonawców. Każdy podwykonawca ma swój własny arkusz, a ja mam też ostatni arkusz o nazwie MasterSchedule.

Harmonogram główny wykorzystuje odniesienia do wszystkich pojedynczych arkuszy, tak że wszystkie harmonogramy podwykonawców są widoczne. Jest to jednak długi czas. Więc umieściłem kolumnę pomocnika we wszystkich arkuszach, które po prostu wracająprawdziwe lubfałszywy wskazanie, czy wiersz powinien być wyświetlany na urządzeniu głównym.

Jednak wiersz jest nadal wyświetlany na urządzeniu głównym, ale kolumna pomocnicza po prostu mówi fałsz. Więc użyłem Autofiltru, aby go ukryć.

TLDR:

Problem: Skrypt Aplikacji Google nie ma interfejsu API do automatycznego filtrowania. Podobnie jak VBA, używając kryteriów itp. Jedyne, co widzę, to ukrywanie wierszy. Ale to jest bardzo powolne. Wiem, że chodzi o zmniejszenie liczby połączeń z usługami Google, a Google sugeruje utworzenie tablicy, a następnie wywołanie wywołania w tablicy. Nie mam pojęcia, jak to zrobić.

Potrzebuję wydajnego skryptu / funkcji, aby spojrzeć na kolumnę i każdą czytaną komórkęfałszywy, funkcja ukryje cały wiersz i pokaże wszystkie inne wiersze.

Najszybszą metodą nieskryptową jest użycie automatycznego filtra Google Sheets i po prostu odznaczeniefałszywy.

Próbowałem utworzyć pętlę for, która odczytuje każdą komórkę w kolumnie i na iterację ukrywa wiersz, jeśli wartość komórki jest fałszywa.Jest niesamowicie powolny.

Widzieć:

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);
    }
  }
}

questionAnswers(1)

yourAnswerToTheQuestion