1
resposta

Filtrar e copiar dados via Apps Script

Olá.

Estou tentando filtrar e copiar automaticamente os dados de uma página do Google Sheets com valores que não estejam contidos no intervalo entre "-00:00:59" e "00:00:59" das colunas "L", "O", "R" e "U". Preciso que todas as células que estejam preenchidas ao lado sejam carregadas também para o outro arquivo. Vou deixar abaixo o print do modelo da planilha:

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeConfesso que não tenho conhecimento para fazer isso sozindo ainda, então recorri a ajuda do ChatGPT. Abaixo, vou deixar registrado código que o ChatGPT me sugeriu para implementar no Apps Script do Google Sheets.

function filtrarCopiarDados() {
  var planilhaOrigem = SpreadsheetApp.openById("1RMHk2HMSApXOojflpY9-rt-LDBoCCARQv6vmoofCCEE/edit#gid=1720011982"); // Substitua 'ID_da_planilha_origem' pelo ID da planilha de origem
  var planilhaDestino = SpreadsheetApp.openById('1RMHk2HMSApXOojflpY9-rt-LDBoCCARQv6vmoofCCEE/edit#gid=394957725'); // Substitua 'ID_da_planilha_destino' pelo ID da planilha de destino
  
  var abaOrigem = planilhaOrigem.getSheetByName("Dados'); // Substitua 'Nome_da_aba_origem' pelo nome da aba de origem
  var abaDestino = planilhaDestino.getSheetByName('Página3'); // Substitua 'Nome_da_aba_destino' pelo nome da aba de destino
  
  var valoresOrigem = abaOrigem.getDataRange().getValues();
  
  var valoresFiltrados = valoresOrigem.filter(function (linha) {
    var colunaL = linha[11]; // Coluna L (índice 11)
    var colunaO = linha[14]; // Coluna O (índice 14)
    var colunaR = linha[17]; // Coluna R (índice 17)
    var colunaU = linha[20]; // Coluna U (índice 20)
    
    if (colunaL >= -0.000011574 && colunaL <= 0.000011574) { // -00:00:59 e 00:00:59 em dias
      return false;
    }
    
    if (colunaO >= -0.000011574 && colunaO <= 0.000011574) {
      return false;
    }
    
    if (colunaR >= -0.000011574 && colunaR <= 0.000011574) {
      return false;
    }
    
    if (colunaU >= -0.000011574 && colunaU <= 0.000011574) {
      return false;
    }
    
    return true;
  });
  
  abaDestino.clearContents(); // Limpa o conteúdo existente na aba de destino
  
  if (valoresFiltrados.length > 0) {
    abaDestino.getRange(1, 1, valoresFiltrados.length, valoresFiltrados[0].length).setValues(valoresFiltrados);
  }
}

No depurador, aparece um erro como se não estivesse conectando aos dados da planilha.

Poderiam me sugerir um post sobre o assunto ou curso que aborde esse tema?

Até logo.

1 resposta

Oi, Guilherme, tudo bem?

Desculpe a demora em te responder!

Inicialmente o problema relacionado à conexão aos dados da planilha ocorre devido ao ID adicionado nas variáveis planilhaOrigem e planilhaDestino. O código deveria ser escrito da seguinte maneira:

 var planilhaOrigem = SpreadsheetApp.openById('1RMHk2HMSApXOojflpY9-rt-LDBoCCARQv6vmoofCCEE'); 
  var planilhaDestino = SpreadsheetApp.openById('1RMHk2HMSApXOojflpY9-rt-LDBoCCARQv6vmoofCCEE');

Outro ponto a ser verificado é o nome das abas. No código, a aba de origem é chamada de "Dados". Verifique se esse é realmente o nome da aba que você deseja copiar os dados. O mesmo vale para a aba de destino, chamada no código de "Página3".

Além disso, notei que no código há uma pequena inconsistência nas aspas na linha que define a variável abaOrigem. O código tem uma aspa simples no início e uma aspa dupla no final. Isso pode estar causando o erro. O correto seria:

var abaOrigem = planilhaOrigem.getSheetByName('Dados'); // Substitua 'Nome_da_aba_origem' pelo nome da aba de origem

É interessante que você verifique as permissões no seu Google Sheets, pois dependendo do seu projeto a função que você está usando pode ser interrompida. Dessa forma, é importante garantir as permissões adequadas para que tudo funcione corretamente.

Recomendo para você aprofundar seus estudos em dados usando o Google Sheets a formação de "Data Analysis com Google Sheets", que você pode acessar clicando neste link.

Todavia, vale ressaltar que como é um assunto externo aos cursos da Alura e que não tenho acesso ao cenário completo do projeto outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!