【问题标题】:How to remove duplicate rows in Google Sheets using script如何使用脚本删除 Google 表格中的重复行
【发布时间】:2019-10-15 23:50:42
【问题描述】:

我目前有一列名为 JobID 的数据。在此列中,有来自每天运行的导入的重复项,并获取有关 JobID 的最新数据并将它们附加到工作表的顶部。

因此,最近的 JobID 行就是我们需要的数据行。

我想知道是否有一个脚本可以在名为“History”的工作表上运行以查找 JobID 列,在下面的每一行中搜索重复项并将它们删除,留下最上面、最近的 JobID 行在工作表中。

我知道使用 Google 表格中的“删除重复项”工具删除重复项非常容易……但我很懒,我正在尝试尽可能多地自动化此过程。

我下面的脚本运行没有错误,但仍然没有做我需要它做的事情。想知道我哪里出错了:

function removeDuplicates() {
//Get current active Spreadsheet
 var sheet = SpreadsheetApp.getActive();
 var history = sheet.getSheetByName("History");

//Get all values from the spreadsheet's rows
 var data = history.getDataRange().getValues();
//Create an array for non-duplicates
 var newData = [];
//Iterate through a row's cells
 for (var i in data) {
   var row = data[i];
   var duplicate = false;
   for (var j in newData) {
    if (row.join() == newData[j].join()) {
     duplicate = true;
    }
  }
//If not a duplicate, put in newData array
 if (!duplicate) {
  newData.push(row);
 }
}
//Delete the old Sheet and insert the newData array
 history.clearContents();
 history.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

【问题讨论】:

  • 请分享电子表格。
  • 嘿库珀!感谢您有兴趣在这里为我提供帮助。为了帮助我,这里是我正在处理的工作表的链接:link
  • 原来我真正需要的只是“JobID”标题。

标签: csv google-apps-script google-sheets google-sheets-api google-sheets-formula


【解决方案1】:

删除重复的 JobID

此功能将保留最靠近列表顶部的那些。如果您想另辟蹊径,请以相反的顺序排列列表。

function removeDuplicates() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName("History");
  var vA=sh.getDataRange().getValues();
  var hA=vA[0];
  var hObj={};
  hA.forEach(function(e,i){hObj[e]=i;});//header title to index
  var uA=[];
  var d=0;
  for(var i=0;i<vA.length;i++) {
    if(uA.indexOf(vA[i][hObj['JobID']])==-1) {
      uA.push(vA[i][hObj['JobID']]);
    }else{
      sh.deleteRow(i+1-d++);
    }  
  }
}

【讨论】:

  • 这很奏效!谢谢库珀!绝对的传奇。
  • 我同意。他真的是一个绝对的传奇。
【解决方案2】:

在 Python 中删除重复的 JobID

根据 Cooper 的回答,我用 Python 编写了相同的函数:

gsheet_id = "the-gsheet-id"
sh = gc.open_by_url("https://docs.google.com/spreadsheets/d/%s/edit#gid=0" % gsheet_id)
wks = sh[0]

    
def removeDuplicates(gwks):
        headerRow = gwks[1]
        columnToIndex = {}
        i = 0
        for column in headerRow:
            columnToIndex[column] = i
            i += 1
        uniqueArray = []
        d = 0
        row_i = 0
        for row in gwks:
            row_i += 1
            if gwks[row_i][columnToIndex['JobID']] not in uniqueArray:
                uniqueArray.append(gwks[row_i][columnToIndex['JobID']])
            else:
                d += 1
                gwks.delete_rows(row_i + 1 - d, 1)


removeDuplicates(wks)

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    相关资源
    最近更新 更多