概述:Google 表格文件链接到 3 个 Google 表单。提交表单后,响应将添加到对应的虚拟电子表格选项卡中:表单响应 1 表单响应 2 表单响应 4
每次提交表单后,除了表单问题的其他答复外,电子邮件地址也会被跟踪(B 列)。
目标:我的目标是确定受访者的电子邮件地址在所有 3 个表单回复选项卡中是否唯一。
例如,如果电子邮件地址在多个虚拟表选项卡中列出,则首选结果将仅显示一个电子邮件地址。
电子邮件地址在虚拟电子表格的 B 列中被跟踪。验证完成后,将执行后续功能。
当前问题:当前逻辑是识别每个工作表选项卡的唯一电子邮件地址,而不是累积结果(即所有选项卡的组合)。如果电子邮件地址列在多个虚拟工作表选项卡中,则首选结果将仅显示一个电子邮件地址。
如能得到进一步指导,我们将不胜感激。
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?
}
}
使用 [...new Set()] 获取数组的唯一值
收集所有工作表(不包括忽略的工作表)中的所有电子邮件地址,然后将结果数组转换为一维数组。之后,您只需应用:
到您的数据。生成的脚本应如下所示(我添加了一些注释作为指导):
输出
参考:
寻找表单提交的匹配项
e
到函数参数来启用事件对象var email = e.namedValues['Email Address']
- 获取提交的电子邮件地址var result = out.indexOf(email);
使用indexOfout
在(电子邮件列表)中查找匹配项indexOf
indexOf() 返回在数组中找到电子邮件的第一个索引, 如果不存在则返回 -1。if (result == -1){
- 因此测试结果为 -1样本日志 - 电子邮件提交