Visão geral : Um arquivo do Planilhas Google é vinculado a 3 Formulários Google. Após o envio de um formulário, as respostas são adicionadas às guias coincidentes da planilha Fictícia: Respostas do Formulário 1 Respostas do Formulário 2 Respostas do Formulário 4
Após cada envio de formulário, os endereços de e-mail são rastreados (coluna B), além de outras respostas às perguntas do formulário.
Objetivo : Meu objetivo é identificar se o endereço de e-mail de um respondente é único em todas as 3 guias de Respostas do Formulário.
Por exemplo, o resultado preferido exibiria apenas um endereço de e-mail se ele estivesse listado em várias guias da Planilha Fictícia.
Os endereços de e-mail estão sendo rastreados na coluna B da Planilha Fictícia. Após essa validação ocorrer, funções subsequentes serão executadas.
Problema atual : A lógica atual está identificando os endereços de e-mail exclusivos por guia de planilha, mas não um resultado cumulativo (ou seja, para todas as guias combinadas). O resultado preferencial exibiria apenas um endereço de e-mail se ele estivesse listado em várias guias de Planilha Fictícia.
Mais orientações seriam muito apreciadas.
function findUnique(){
var col = 1 ; // column B (Email Address)
var ss = SpreadsheetApp.getActive();
var allsheets = ss.getSheets();
// Array listing sheets to exclude from execution
var exclude = ["Reference","Index"];
for (var s in allsheets){
var source_sheet = allsheets[s];
// Stop iteration execution; exclude Reference and Index tabs.
if(exclude.indexOf(source_sheet.getName()) != -1) continue;
var data=source_sheet.getDataRange().getValues();// get all data
//Logger.log(data);
var newdata = new Array();
for(nn in data){
var duplicate = false;
for(j in newdata){
if(data[nn][col] == newdata[j][0]){
duplicate = true;
}
}
if(!duplicate){
newdata.push([data[nn][col]]);
}
}
Logger.log(newdata);
newdata.sort(function(x,y){
var xp = Number(x[0]);// ensure you get numbers
var yp = Number(y[0]);
return xp == yp ? 0 : xp < yp ? -1 : 1;// sort on numeric ascending
});
//Logger.log(newdata); // Uniques?
}
}
Use [...new Set()] para obter os valores exclusivos do array
Reúna todos os endereços de e-mail de todas as planilhas (excluindo as planilhas ignoradas) e então transforme o array resultante em um array unidimensional. Depois, você só precisa aplicar:
para seus dados. O script resultante deve ficar assim (adicionei alguns comentários para orientação):
Saída
Referências:
Procurando uma correspondência no formulário de envio
e
ao argumento da funçãovar email = e.namedValues['Email Address']
- obter o endereço de e-mail enviadovar result = out.indexOf(email);
use indexOf para procurar uma correspondência emout
(a lista de e-mails)indexOf
O indexOf() retorna o primeiro índice no qual o e-mail pode ser encontrado na matriz OU -1 se não estiver presente .if (result == -1){
- então teste para um resultado de -1REGISTRO DE AMOSTRA - envio por e-mail