[英]How to highlight duplicates faster in google sheets script?
我编写了markDupes1Col
函数,该函数突出显示了列中的所有重复项。 它的效果很好,但是当行数超过5万时,它变得非常慢。 我有什么可以做得更快?
function removeEmptyCells(values) {
values = values.filter(function (el) {
return el != null && el[0] !== '' && el[0] != null;
});
return values;
}
function findDupes(arr) {
var sortedData = arr.slice().sort();
var duplicates = [];
for (var i = 0; i < sortedData.length; i++) {
if (sortedData[i] && sortedData[i] !== '' && sortedData[i + 1] == sortedData[i]) {
duplicates.push(sortedData[i]);
}
}
return duplicates;
}
function markDupes1Col() {
var ss = SpreadsheetApp.openById(appId);
var sheetName = arguments[0];
var sheet = ss.getSheetByName(sheetName);
for(var n = 1; n < arguments.length; n++) {
var lastRow = sheet.getLastRow();
if (lastRow == 0) lastRow = 1;
var rangeArray = sheet.getRange(1, arguments[n], lastRow);
var valuesArray = rangeArray.getValues();
valuesArray = removeEmptyCells(valuesArray);
// Convert to one dimensional array
valuesArray = [].concat.apply([], valuesArray);
var duplicates = findDupes(valuesArray);
rangeArray.setBackground(null);
if (duplicates.length > 0) {
for (var i = 0; i < valuesArray.length; i++) {
for (var j = 0; j < duplicates.length; j++) {
if (valuesArray[i] == duplicates[j]) {
sheet.getRange(i + 1, arguments[n]).setBackground("#b7e1cd");
break;
}
}
}
}
}
}
setBackground
。 setBackgrounds()
代替。 {}
存储重复项 function findDupes(arr){
var valObj = {};
var duplicates = {};
arr.forEach(function(row){
var el = row[0];
if(el in valObj){
duplicates[el] = 1
} else {
valObj[el] = 1;
}
})
return duplicates;
}
//....
valuesArray = removeEmptyCells(valuesArray);
//valuesArray = [].concat.apply([], valuesArray); Removed
var duplicates = findDupes(valuesArray);
//.....
rangeArray.setBackgrounds(
valuesArray.map(function(row){
return [(row[0] in duplicates) ? "#b7e1cd" : null]
})
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.