Google脚本:如果其中的值存在于多个工作表中,则删除该行

新手

几个月前,我曾发布过一个问题,关于如果另一张表中存在某行,则删除该行。

这是我以前的帖子中接受的答案。

function deleteRowInSheet1() { 
  var s1 = SpreadsheetApp.openById("SS_ID").getSheetByName('Sheet1');
  var s2 = SpreadsheetApp.openById("SS_ID").getSheetByName('Sheet2'); 
  var values1 = s1.getDataRange().getValues();
  var values2 = s2.getDataRange().getValues();
  var resultArray = [];
  for(var n in values1){
    var keep = true
    for(var p in values2){
      if( values1[n][0] == values2[p][0] && values1[n][1] == values2[p][1]){
        keep=false ; break ;
      }
    }
    if(keep){ resultArray.push(values1[n])};
  }
  s1.clear()
  s1.getRange(1,1,resultArray.length,resultArray[0].length).setValues(resultArray);
}

现在,我的问题是如果要比较的张数超过1张,该怎么办。假设我有4张纸。

工作表1:

NAME | 位置| 年龄

卡尔| 佛罗里达| 45

迈克| 佛罗里达| 41

Suzy | 佛罗里达

表格2:

NAME | 位置| 年龄

迈克| 佛罗里达| 41

工作表3:

NAME | 位置| 年龄

迈克| 佛罗里达| 41

表格4:

NAME | 位置| 年龄

迈克| 佛罗里达| 41

该脚本应删除工作表2至4中的Mike Florida行,因为它在工作表1中具有重复数据。列1和2再次是比较4个工作表中所有数据的基础,因为这些值将是唯一的。我试图修改回答的脚本,但似乎无法使其运行。我了解逻辑,但不确定我错过了哪一部分:

这是我的代码:

function deleteRowInSheets1to3() { 
      var s1 = SpreadsheetApp.openById("SS_ID").getSheetByName('Sheet1'); //this is the basis of all sheets. values to be compared is column 2
      var s2 = SpreadsheetApp.openById("SS_ID").getSheetByName('Sheet2');  
      var s3 = SpreadsheetApp.openById("SS_ID").getSheetByName('Sheet3');
      var s4 = SpreadsheetApp.openById("SS_ID").getSheetByName('Sheet4'); 

      var values1 = s1.getDataRange().getValues();
      var values2 = s2.getDataRange().getValues();
      var values3 = s3.getDataRange().getValues();
      var values4 = s4.getDataRange().getValues();

      var resultArray = [];
      for(var n in values1){
        var keep = true
        for(var p in values2){
          if( values1[n][0] == values2[p][0] && values1[n][1] == values2[p][1]){
            keep=false ; break ;
          }

          for(var q in values3){
            if( values1[n][0] == values3[q][0] && values1[n][1] == values3[q][1]){
              keep=false ; break ;
            }

            for(var r in values4){
              if( values1[n][0] == values4[r][0] && values1[n][1] == values4[r][1]){
                keep=false ; break ;
              }
            }  
          }  
        }
        if(keep){ resultArray.push(values1[n])};
      }
      s1.clear()
      s1.getRange(1,1,resultArray.length,resultArray[0].length).setValues(resultArray);
    }

感谢您的任何建议!:)

奥兰多

我认为我们几乎有同样的情况。这是一个可能重复的问题。看到这篇文章

提供的答案如下(不是我的代码):

function removeDupsInOtherSheets() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s1 = ss.getSheetByName("Sheet1").getDataRange().getValues();  
  var s2 = ss.getSheetByName("Sheet2").getDataRange().getValues(); 
  var s3 = ss.getSheetByName("Sheet3").getDataRange().getValues();  
  // iterate s3 and check in s1 & s2 if duplicate values exist
  var nS1 = [];
  var nS2 = [];
  var s3Col1 = [];// data in column1 of sheet3
  for(var n in s3){
    s3Col1.push(s3[n][0]);
  }
  for(var n in s1){ // iterate sheet1 and test col 1 vs col 1 in sheet3
    var noDup1 = checkForDup(s1[n],s3Col1)
    if(noDup1){nS1.push(noDup1)};// if not present in sheet3 then keep
  } 
  for(var n in s2){  // iterate sheet2 and test col 1 vs col 1 in sheet3
    var noDup2 = checkForDup(s2[n],s3Col1)
    if(noDup2){nS2.push(noDup2)};// if not present in sheet3 then keep
  }
  Logger.log(nS1);// view result
  Logger.log(nS2);
  ss.getSheetByName("Sheet1").getDataRange().clear();// clear and update sheets
  ss.getSheetByName("Sheet2").getDataRange().clear();
  ss.getSheetByName("Sheet1").getRange(1,1,nS1.length,nS1[0].length).setValues(nS1);
  ss.getSheetByName("Sheet2").getRange(1,1,nS2.length,nS2[0].length).setValues(nS2);
}

function checkForDup(item,s){
  Logger.log(s+' = '+item[0]+'  ?')
    if(s.indexOf(item[0])>-1){
      return null;
    }
  return item;
}

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Google脚本:如果其中的值存在于多个工作表中,则删除该行

来自分类Dev

Google脚本:如果另一个工作表中存在该行中的值,则删除该行

来自分类Dev

如果该行存在于另一个Datable中,则从该数据表中删除该行

来自分类Dev

如果该行的字段存在于另一个文件中,则删除该行

来自分类Dev

如果该行存在于下一页或其他某些页面的JQuery数据表中,则如何删除该行

来自分类Dev

删除字典值(如果它们存在于集合中)

来自分类Dev

找到存在于工作表 1 但不在工作表 2 中的缺失值

来自分类Dev

删除临时表(如果存在于SQL Azure上)

来自分类Dev

如果值已存在于Javascript集中,则如何删除

来自分类Dev

更新或插入多个记录(如果不存在于mysql数据库的表中)

来自分类Dev

控制Excel公式存在于一张纸的多个工作表中

来自分类Dev

如果值存在于countif中,则删除单元格

来自分类Dev

如何从一个HashMap中删除,如果值存在于Java的8风格

来自分类Dev

如果值存在于多个类别中,如何按分组进行区分

来自分类Dev

如果值存在于多个类别中,如何按分组进行区分

来自分类Dev

删除过程(如果存在于DB Oracle中)

来自分类Dev

如果某些记录存在于同一表中,则设置列值

来自分类Dev

如果列存在于 SAS 表中,则返回 TRUE 值

来自分类Dev

如果该行存在于C#的SQL数据库中,则显示标签

来自分类Dev

多个表的逆集,其中不是所有记录都存在于一个表中

来自分类Dev

从多个表中选择仅存在于其中一个表中的一行

来自分类Dev

如何从数据库 X 中的表中删除行,其中 ID 存在于数据库 Y 中

来自分类Dev

如果键,值对存在于字典中,则跳过python

来自分类Dev

如果键,值对存在于字典中,则跳过python

来自分类Dev

如果存在于 csv 文件的列中,则替换值

来自分类Dev

查看值是否存在于多个数组中,如果存在则更改一个数组中的值

来自分类Dev

测试值是否存在于多个列表中

来自分类Dev

MySQL:如果有条件存在于其他表中,则从表中删除行

来自分类Dev

如果标识符不存在于另一个表中,则删除表中的行

Related 相关文章

  1. 1

    Google脚本:如果其中的值存在于多个工作表中,则删除该行

  2. 2

    Google脚本:如果另一个工作表中存在该行中的值,则删除该行

  3. 3

    如果该行存在于另一个Datable中,则从该数据表中删除该行

  4. 4

    如果该行的字段存在于另一个文件中,则删除该行

  5. 5

    如果该行存在于下一页或其他某些页面的JQuery数据表中,则如何删除该行

  6. 6

    删除字典值(如果它们存在于集合中)

  7. 7

    找到存在于工作表 1 但不在工作表 2 中的缺失值

  8. 8

    删除临时表(如果存在于SQL Azure上)

  9. 9

    如果值已存在于Javascript集中,则如何删除

  10. 10

    更新或插入多个记录(如果不存在于mysql数据库的表中)

  11. 11

    控制Excel公式存在于一张纸的多个工作表中

  12. 12

    如果值存在于countif中,则删除单元格

  13. 13

    如何从一个HashMap中删除,如果值存在于Java的8风格

  14. 14

    如果值存在于多个类别中,如何按分组进行区分

  15. 15

    如果值存在于多个类别中,如何按分组进行区分

  16. 16

    删除过程(如果存在于DB Oracle中)

  17. 17

    如果某些记录存在于同一表中,则设置列值

  18. 18

    如果列存在于 SAS 表中,则返回 TRUE 值

  19. 19

    如果该行存在于C#的SQL数据库中,则显示标签

  20. 20

    多个表的逆集,其中不是所有记录都存在于一个表中

  21. 21

    从多个表中选择仅存在于其中一个表中的一行

  22. 22

    如何从数据库 X 中的表中删除行,其中 ID 存在于数据库 Y 中

  23. 23

    如果键,值对存在于字典中,则跳过python

  24. 24

    如果键,值对存在于字典中,则跳过python

  25. 25

    如果存在于 csv 文件的列中,则替换值

  26. 26

    查看值是否存在于多个数组中,如果存在则更改一个数组中的值

  27. 27

    测试值是否存在于多个列表中

  28. 28

    MySQL:如果有条件存在于其他表中,则从表中删除行

  29. 29

    如果标识符不存在于另一个表中,则删除表中的行

热门标签

归档