几个月前,我曾发布过一个问题,关于如果另一张表中存在某行,则删除该行。
这是我以前的帖子中接受的答案。
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] 删除。
我来说两句