If statement Google脚本应用程序删除Google工作表中特定列中具有特定值的重复行

If statement Google脚本应用程序删除Google工作表中特定列中具有特定值的重复行,if-statement,google-apps-script,google-sheets,If Statement,Google Apps Script,Google Sheets,我有一个谷歌工作表,其中人们提交他们正在处理的任务,他们将提交一个状态更新,该更新要么“正在进行”,要么“完成”,比如任务a。任务a在D[4]列,状态在E[5]列。我试图让这段代码只在存在状态为“完成”的重复任务A时删除任务A的“进行中”行。这可用于标识重复行并按顺序删除重复行,但我不确定如何使其在存在“任务A”“完成”行时仅删除重复的“任务A”“正在进行”行。任何帮助都将不胜感激 function removeDuplicates() { var sheet = SpreadsheetAp

我有一个谷歌工作表,其中人们提交他们正在处理的任务,他们将提交一个状态更新,该更新要么“正在进行”,要么“完成”,比如任务a。任务a在D[4]列,状态在E[5]列。我试图让这段代码只在存在状态为“完成”的重复任务A时删除任务A的“进行中”行。这可用于标识重复行并按顺序删除重复行,但我不确定如何使其在存在“任务A”“完成”行时仅删除重复的“任务A”“正在进行”行。任何帮助都将不胜感激

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
  var data = sheet.getDataRange().getValues();
  var newData = [];
  for (i in data) {
    var row = data[i];
    var duplicate = false;
    for (j in newData) {
      if(row[3] == newData[j][3]){
  duplicate = true;
}
    }
    if (!duplicate) {
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
我会试试看

function removeDuplicates()
{
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");
  var dataRange = sheet.getDataRange();
  var data = dataRange.getValues();
  var indexOfStatusColumn = 4;
  var newData = [];
  data.forEach(function (row, rowI){
    var isDuplicate = false
    if (newData.length)
    newData.forEach(function (dup, dupI)
    {
      if (dup[3] == row[3])
      {
        if (row[indexOfStatusColumn] == "Complete" && dup[indexOfStatusColumn] != "Complete")
          newData[dupI][indexOfStatusColumn] = "Complete";
        isDuplicate = true;
        return (false);
      }
    })
    if (!isDuplicate)
      newData.push(row);
  });
  dataRange = sheet.getRange(2, 1, dataRange.getLastRow() - 1, dataRange.getLastColumn());
  dataRange.clearContent();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
几件事

  • 我使用
    forEach()
  • 通过返回
    false
    来中断循环,以避免通过所有
    新数据进行无用的解析
  • 当我发现一个复制品时,我会执行一些这样的操作
  • 检查
    data
    上的复制是否
    Complete
    ,如果是,则检查
    newData上的复制是否不完整
  • newData
    中的值更改为“Complete”,这样它将保持完整状态(小心,如果两行上的数据不同,它可能会扭曲数据)
  • 还可以从范围中使用
    clearContent()
    ,以避免删除工作表的所有内容,但仅删除其中的特定部分。在这里,我重新构建了它以保留标题
  • 参考资料

    我会试试看

    function removeDuplicates()
    {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");
      var dataRange = sheet.getDataRange();
      var data = dataRange.getValues();
      var indexOfStatusColumn = 4;
      var newData = [];
      data.forEach(function (row, rowI){
        var isDuplicate = false
        if (newData.length)
        newData.forEach(function (dup, dupI)
        {
          if (dup[3] == row[3])
          {
            if (row[indexOfStatusColumn] == "Complete" && dup[indexOfStatusColumn] != "Complete")
              newData[dupI][indexOfStatusColumn] = "Complete";
            isDuplicate = true;
            return (false);
          }
        })
        if (!isDuplicate)
          newData.push(row);
      });
      dataRange = sheet.getRange(2, 1, dataRange.getLastRow() - 1, dataRange.getLastColumn());
      dataRange.clearContent();
      sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
    }
    
    几件事

  • 我使用
    forEach()
  • 通过返回
    false
    来中断循环,以避免通过所有
    新数据进行无用的解析
  • 当我发现一个复制品时,我会执行一些这样的操作
  • 检查
    data
    上的复制是否
    Complete
    ,如果是,则检查
    newData上的复制是否不完整
  • newData
    中的值更改为“Complete”,这样它将保持完整状态(小心,如果两行上的数据不同,它可能会扭曲数据)
  • 还可以从范围中使用
    clearContent()
    ,以避免删除工作表的所有内容,但仅删除其中的特定部分。在这里,我重新构建了它以保留标题
  • 参考资料


    您能分享一下您的电子表格吗?我很乐意帮忙。@JSmith谢谢!刚刚要求您访问。您能分享您的电子表格吗?我很乐意为您提供帮助。@JSmith谢谢!只是请求您访问。谢谢您的帮助,不幸的是,这似乎不起作用。这是电子表格。我希望这有帮助!我真的很感谢你的帮助@里基亚当斯太棒了!很高兴这有帮助。ThanksI刚刚尝试再次运行它,但由于某些原因,它仍然没有删除正在进行的行。而是删除状态为“完成”的重复任务。它还会复制第一行并将其插入第二行。你知道为什么会这样吗?很抱歉谢谢@RickyAdams重新向您发送了访问请求谢谢您的帮助,不幸的是,这似乎不起作用。这是电子表格。我希望这有帮助!我真的很感谢你的帮助@里基亚当斯太棒了!很高兴这有帮助。ThanksI刚刚尝试再次运行它,但由于某些原因,它仍然没有删除正在进行的行。而是删除状态为“完成”的重复任务。它还会复制第一行并将其插入第二行。你知道为什么会这样吗?很抱歉谢谢@RickyAdams重新向您发送了访问请求