尝试获取最后x个唯一条目,并通过脚本获取另一列的相应值

时间:2014-01-15 16:02:56

标签: javascript google-apps-script google-sheets google-docs

所以我正试图用我的纸张解决问题, 它包含一个Vlookup,人们输入日期,他们的Intials,custID和它显示 该行的值。 (原始数据是表单回复,电子邮件,时间戳和2个公式结束)

这不是最好的解决方案,所以我想通过在提交页面上显示查找值来尝试自动化,但这已经超出了我的范围。

然后我想到了一个通过脚本自动查找,如下所示,(记住Col A是时间戳,B是电子邮件addy&列X有我们想要返回的值。)

我希望它从最后一行开始,从B中找到最后的x个唯一值(可能使用A来按日期/时间查找最大或最后一个条目)并将行添加到数组中以供稍后使用(整行isn'实际需要我猜,只有B和X.)

一旦它在数组中有10,输出数组的B列和数组的Z)

在这里使用我有限的脚本知识和帖子,这是我到目前为止的地方。

 function lastUniqueList(){ 
 var sheetName = "SheetNameHere"; // sheet name with data
 var columnNo = 2; // A = 1, B = 2 Column that we want the unqiue values from. IE last x unique email addresses.
 var uniqueToReturn = 10; //how many unique entries, ie, how many unique emails.
 var uniqueLookup = 24; // Column number that has the value we want looked up and returned.

 var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
 var data = sheet.getDataRange().getValues();
 var targetData = [];
 var counter = data.length;

while (targetData.length < uniqueToReturn)
  {



    if (data[counter][columnNo - 1] != "" && data[counter][columnNo - 1] != targetData.getDataRange.getValues()[columnNo - 1])
    {



      targetData.push(data.splice(counter, 1)[0]);
    }
    else
    {


      counter--;
    }
  }   



 }

所以现在我对如何将数据范围中的条目与数组进行比较以避免重复进行了讨论。

if语句的第二部分,在&amp;&amp;是不对的。我正在努力解决这个问题。

如果有人能给我任何指示或一些好的链接,我会很感激。

另外,我希望我做对了,它从最后一行倒退了。测试data.length

时,Logger确实显示了正确的行号等

将继续搜索电路板。

1 个答案:

答案 0 :(得分:0)

所以这就是我提出的(假设我正确理解了问题):

function lastUniqueList(){ 
    var sheetName = "SheetNameHere"; // sheet name with data
    var columnNo = 2; // A = 1, B = 2 Column that we want the unqiue values from. IE last x unique email addresses.
    var uniqueToReturn = 10; //how many unique entries, ie, how many unique emails.
    var uniqueLookup = 24; // Column number that has the value we want looked up and returned.

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
    var data = sheet.getDataRange().getValues();
    var targetData = [];

    for (var counter=data.length-1; counter >= 0 && targetData.length < uniqueToReturn; counter--) {
        if (data[counter][columnNo - 1] == "") {
            continue;
        }
        if (targetData.some(function (element, index, array) {
            return data[counter][columnNo - 1] == element[columnNo - 1];
        })) {
            continue;
        }
        targetData.push(data[counter]);
    }
}

秘密的问题在于Array.prototype.some方法。它询问targetData中是否有任何元素通过了某些测试。测试的值columnNo与我们想要插入的值相匹配。这就是我们保证独特价值的方式。

我还将while循环转换为for循环,因为它更整洁。

Here是我测试解决方案的jsFiddle。