
[英]Copy row if value exists in both sheet 1 and sheet 2 and paste it to sheet 3. Google Sheets. Google Apps Script
[英]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.