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