我创建了一个删除Google表格中重复行的脚本:
function removeDuplicates() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var newData = new Array();
for(i in data){
var row = data[i];
var duplicate = false;
for(j in newData){
if(row[1] == newData[j][1]){
duplicate = true;
}
}
if(!duplicate){
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
现在我想修改它以不删除重复的行,而是在两行/单元格中检测到的重复项的开头添加“DUPLICATE:”(脚本只扫描第2列(B))并将它们着色为橙色但我不明白该怎么做。
答案 0 :(得分:2)
你仍然需要一个双循环,但没有必要拥有newData
数组; data
数组可以就地修改。如果B列中有两行匹配,则两列中的两列都会得到“Duplicate”。for循环中的显式边界可以很容易地避免将行与自身进行比较。
var data = sheet.getDataRange().getValues();
for (i = 0; i < data.length; i++) {
for (j = 0; j < i; j++) {
if (data[i][1] == data[j][1]) {
data[i][0] = "Duplicate";
data[j][0] = "Duplicate";
}
}
sheet.clearContents();
sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
顺便说一句,这个逻辑可以在没有脚本的情况下实现,使用Google表格公式,例如
=if(countif(B:B, B2) > 1, "Duplicate", )
(将其置于A2中,并向下复制到列中)
或者,作为A2中的数组公式:
=arrayformula(if(countif(B:B2, B:B2) > 1, "Duplicate", ))