使用 Apps 脚本将重复行替换为 Google 表格中的新数据

问题描述 投票:0回答:2

所以,情况是这样的。我有一张表正在从我的 WooCommerce 商店中提取一些数据。它每小时获取所有订单的详细信息并保存它们。

现在,当我的商店中的订单状态发生变化时,将在工作表中添加具有相同订单 ID 的新行,我想用这个新行替换工作表中的旧行。我四处寻找删除重复项的方法,发现了以下函数。这是有效的,但问题是它删除了新行并保留了现有行。但我想删除现有的并保留新的。我想根据工作表第 15 个索引中的订单 ID 检查重复项。

    function removeDuplicates() {
  var sheet = SpreadsheetApp.getActive().getSheetByName("Orders");
  var data = sheet.getDataRange().getValues();
  var newData = [];
  for (var i in data) {
    var row = data[i];
    var duplicate = false;
    for (var j in newData) {
      if(row[15] == newData[j][15]){
             duplicate = true;
                 }
    }
    if (!duplicate) {
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

任何帮助将不胜感激。谢谢。

javascript google-apps-script google-sheets
2个回答
1
投票

说明:

您的代码从第一行开始扫描,直到到达数据的最后一行。所有唯一的项目都存储在

newData
数组中。当它多次遇到相同的项目时,它会简单地忽略它,因为它已经被添加到数组中。

您的目标是保持新记录。后者应由 date 列定义。因此,在执行 for 循环之前,您可以按

降序
顺序sort数组按日期;这就是保留新记录(第一次出现)并忽略所有其他你不想要的重复记录。例如,如果Column B是一个日期/日期时间列,指示添加记录的时间,您可以简单地对数据进行排序:

sheet.getDataRange().sort({column: 2, ascending: false}) // replace 2 with your date column

解决方案:

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActive().getSheetByName("Orders");
  var data = sheet.getDataRange().getValues();
  sheet.getDataRange().sort({column: 2, ascending: false}) // replace 2 with your date column
  var newData = [];
  for (var i in data) {
    var row = data[i];
    var duplicate = false;
    for (var j in newData) {
      if(row[15] == newData[j][15]){
             duplicate = true;
                 }
    }
    if (!duplicate) {
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}


-1
投票

你能帮我吗。我正在尝试为我的项目写入此代码,但它不起作用。它删除了最后更新行。我的日期在第一个列中的唯一值在 2tn 列中。如果我在新行中添加重复值,我需要这样做该行替换为序数行(开玩笑保留新行并删除旧行)。

© www.soinside.com 2019 - 2024. All rights reserved.