按日期排序重复提交

时间:2017-07-22 00:30:36

标签: google-apps-script google-sheets google-form

我有一个Google表单,可将​​数据存入Google电子表格。填好的第一个表格的所有数据将存放在第1行,然后填写的下一个表格将存放在第2行,等等。我遇到的一个问题是,有时人们会丢失链接来编辑他们提交的表格并且他们提交了一个全新的条目,在Google工作表上创建了一个包含更新信息的重复行。

我正在尝试制作sheet2,它会过滤掉重复的条目,但仍保留它们首次出现的顺序。我考虑过使用UNIQUE(range)函数,但问题是第一次出现名称时才会使用唯一函数。我想要它做的是保持名字出现的位置,但是获取名称出现的最新时间的数据,因为它将具有更新的信息。我无法想办法自己做这件事。是否有更有知识的人可以提供帮助?

以下是我希望实现的一个例子。约翰出现的第一次被最近出现的时间覆盖。

enter image description here

1 个答案:

答案 0 :(得分:1)

我认为这应该适合你。

function findCopyDeleteDupes()
{
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sht=ss.getActiveSheet();
  var rng=sht.getDataRange();
  var rngA=rng.getValues();
  var nodupes=[];
  var dupeRows=[];
  for(var i=0;i<rngA.length;i++)
  {
    var idx=nodupes.indexOf(rngA[i][1]);
    if(idx==-1)//if not in nodupes then put it in nodupes
    {
      nodupes.push(rngA[i][1]);
    }
    else
    {
      for(var j=0;j<rngA[i].length;j++)
      {
        rngA[idx][j]=rngA[i][j];//Copy data from the latest time to the first position
      }
      dupeRows.push(i+1);//add this row to the delete rows array
    }
  }
  rng.setValues(rngA);
  for(var i=dupeRows.length-1;i>-1;i--)//delete rows from the bottom first
  {
     sht.deleteRow(dupeRows[i])
  }
}