Filtrar ou ocultar linha

[História de volta] Eu tenho uma planilha do Google que uso para enviar cronogramas por e-mail para subcontratados. Cada subcontratado tem sua própria planilha e também tenho uma última planilha chamada MasterSchedule.

O planejamento mestre usa referências a todas as folhas individuais, de modo que todas as programações do subcontratante estejam visíveis. Isso é muito demorado embora. Então eu incluí uma coluna auxiliar em todas as planilhas que simplesmente retornaverdade oufalso indicando se uma linha deve ser exibida ou não no mestre.

No entanto, a linha ainda é exibida no mestre, mas a coluna auxiliar apenas diz falso. Então usei o AutoFiltro para ocultá-lo.

TLDR:

Problema: o Script do Google Apps não possui API para o filtro automático. Como o VBA usando critérios, etc. Então, a única opção que vejo é esconder linhas. Mas isso é muito lento. Eu sei que a ideia é reduzir o número de chamadas para os serviços do Google, e o Google sugere fazer uma matriz e depois fazer uma chamada na matriz. Eu não tenho nenhuma idéia de como fazer isso.

Eu preciso de um script / função eficiente para ver uma coluna e cada célula que lêfalso, a função ocultará a linha inteira e mostrará todas as outras linhas.

O método de script não mais rápido é usar a versão do filtro automático do Google Sheets e simplesmente desmarcarfalso.

Eu tentei fazer um loop for que lê cada célula em uma coluna e por iteração oculta a linha se o valor da célula é false.É incrivelmente lento.

Vejo:

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