用于对行进行重复数据删除的工作表脚本:意外行为

时间:2019-04-09 23:28:37

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

我有一个脚本,该脚本将数据从一张纸发布到另一张纸,然后对数据进行重复数据删除。重复数据删除脚本似乎仅对某些数据进行重复数据删除。例如,第2至13行保持重复,而第35行之后的行被删除。顶部行从插入脚本中发布。

如何获取脚本:

a)对全部数据进行重复数据删除。
b)删除从插入脚本中发布的新重复行,而不是已经存在的行。

我尝试设置要检查的工作表的整个范围,但这似乎干扰了发布到新数据的过程。这是我设法找到/开发的最简单的脚本。

function Run(){
  insert();
  dedupe();
}
function insert() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var source = ss.getSheetByName('Candidate Refresh'); // change here
  var des = ss.getSheetByName('Candidate Listing'); // change here

  var sv = source
    .getDataRange()
    .getValues();
  sv.shift();
  des.insertRowsAfter(1, sv.length);
  des.getRange(2, 1, sv.length, source.getLastColumn()).setValues(sv);
}
function dedupe() {
var sheet = SpreadsheetApp.getActive().getSheetByName('Candidate Listing');
var data = sheet.getDataRange().getValues();
var newData = new Array();
for(i in data){
var row = data[i];
var duplicate = false;
for(j in newData){
  if(row.join() == newData[j].join()){
    duplicate = true;
  }
}
if(!duplicate){
  newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, 
newData[0].length).setValues(newData);
}

我希望发布新数据,检查所有数据中是否存在重复项,如果发现脚本重复发布,则将删除脚本发布的新数据。

1 个答案:

答案 0 :(得分:0)

因此,我认为我的原始文章确实从重复数据删除的角度起作用,但我还需要它仅查看一个值,因此我发现以下脚本可以更好地工作。

function removeDuplicates() {
 var sheet = SpreadsheetApp.getActiveSheet();
 var rows = sheet.getLastRow();
 var firstColumn = sheet.getRange(1, 2, rows, 1).getValues();
 firstColumn = firstColumn.map(function (e) {return e[0]})
 for (var i = rows; i >0; i--) {
   if (firstColumn.indexOf(firstColumn[i-1]) != i-1) {
    sheet.deleteRow(i);
        }
   }
}