繁体   English   中英

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

[英]Google Script: Delete row if a value in it exists in another sheet

我对Google脚本有疑问。 我从今年2月才开始使用Google Script,因此我对此尚无深入了解。 无论如何,我的问题是:

如果某行的某些值存在于另一张工作表中,我可以删除该行吗? 我尝试了一些在Internet上找到的概念,但无法提供有效的功能。

这是Google文档的详细视图。

例如,在工作表1中,我有两行:


NAME | 位置| 年龄

卡尔| 佛罗里达| 45

迈克| 佛罗里达| 41


在工作表2中:


NAME | 位置| 年龄

迈克| 佛罗里达| 41


该脚本应删除工作表1中的Mike Florida行,因为它在工作表2中具有重复数据。因此,基本上,如果工作表1中存在工作表2中的数据,则应在工作表1中将其删除。但棘手的部分是,我必须进行比较仅第1列和第2列。 第3列并不重要。 如果工作表2中的第1列和第2列在工作表1中具有相同的准确值,则应在工作表1中将其删除,并保留工作表2中的数据。

我在Google网站上尝试了本教程 ,但仍然无法比较这两张纸并删除重复的数据。

非常感谢。 任何帮助/想法/建议将不胜感激。 :)

+++++++++

我现在只想出一个代码,并使用了2D数组库。

function deleteRowInSheet1() { 
   var s1 = SpreadsheetApp.openById("COPY SPREADSHEET ID HERE").getSheetByName('Sheet1');
   var s2 = SpreadsheetApp.openById("COPY SPREADSHEET ID HERE").getSheetByName('Sheet2'); 
   var values1 = s1.getDataRange().getValues();
   var values2 = s2.getDataRange().getValues();
  // Check if Mike exists in SS1.
  if (ArrayLib.find(values2, 0, 'Mike') != -1) {
    for( var row = values1.length -1; row >= 0; --row ) {
      if (values1[row][0] == 'Mike')
      s1.deleteRow(parseInt(row)+1);
    }
  }
}

但是,此代码仅获得特定值,即Mike。 如果工作表2中存在行Mike,则工作表1中的行Mike也将被删除。 我尝试更多地修改代码以比较两个不同工作表中的两个值,但似乎无法使其正常工作。

您使用的2D数组库的问题在于, find方法返回一个与其在数组中位置相对应的整数,在这种情况下,这对您并不是真正有用的信息。 我建议在两个数组中循环(这是非常快的),并使用一个布尔值来确定我们是否保留(或不保留)sheet1中的值。 这是我用于测试的代码,它似乎可以正常工作。

function deleteRowInSheet1() { 
  var s1 = SpreadsheetApp.openById("1RxtFWZJRWxgW-zUM6S-dvZ0yFe-G2DGJFWI3gAt-1T0").getSheetByName('Sheet1');
  var s2 = SpreadsheetApp.openById("1RxtFWZJRWxgW-zUM6S-dvZ0yFe-G2DGJFWI3gAt-1T0").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);
}

如您所见,我删除了整个工作表以使用新的数据数组对其进行重建,但是这样做会丢失可能存在的所有格式。 如果这对您来说是个问题,那么您将不得不使用clearContents() 请参阅此处的文档,但删除最后一行下方的每个未使用行中的所有格式...我想起来很难实施。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM