Zeile filtern oder ausblenden

[Hintergrundgeschichte] Ich verwende ein Google Sheet, um Zeitpläne per E-Mail an Subunternehmer zu senden. Jeder Subunternehmer hat ein eigenes Blatt, und ich habe auch ein letztes Blatt namens MasterSchedule.

Der Master-Zeitplan verwendet Verweise auf alle einzelnen Arbeitsblätter, sodass alle Subunternehmer-Zeitpläne sichtbar sind. Dies ist allerdings sehr lang. Deshalb habe ich in alle Arbeitsblätter eine Hilfsspalte eingefügt, die einfach zurückkehrtwahr oderfalsch Gibt an, ob eine Zeile auf dem Master angezeigt werden soll oder nicht.

Die Zeile wird jedoch weiterhin auf dem Master angezeigt, aber die Hilfsspalte sagt zufällig false. Also habe ich den AutoFilter verwendet, um ihn auszublenden.

TLDR:

Problem: Google Apps Script verfügt nicht über eine API für den automatischen Filter. Wie VBA unter Verwendung von Kriterien usw. Die einzige Option, die ich sehe, ist das Ausblenden von Zeilen. Das ist aber sehr langsam. Ich weiß, die Idee ist, die Anzahl der Anrufe bei den Google-Diensten zu reduzieren, und Google schlägt vor, ein Array zu erstellen und dann einen Anruf auf dem Array auszulösen. Ich habe keine Ahnung, wie das geht.

Ich benötige ein effizientes Skript / eine effiziente Funktion, um eine Spalte und jede Zelle, die gelesen wird, zu betrachtenfalsch, blendet die Funktion die gesamte Zeile aus und zeigt alle anderen Zeilen an.

Die schnellste Nicht-Skript-Methode ist die Verwendung der Google Sheets-Version des automatischen Filters und das einfache Deaktivieren des Kontrollkästchensfalsch.

Ich habe versucht, eine for-Schleife zu erstellen, die jede Zelle in einer Spalte liest und pro Iteration die Zeile verbirgt, wenn der Zellenwert falsch ist.Es ist unglaublich langsam.

Sehen:

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage