查找重复项,包括脚本格式、语法
Finding duplicates including format with script, grammar
我需要一个脚本来在我的 Google 驱动器 Sheet 中查找格式完全相同的重复项。具体来说,一列中可能有重复的数据,但一个实例应该是红色的,另一个实例应该是黑色的。我想突出显示两个实例均为黑色的单元格。我有一个脚本来查找重复项,但无论文本颜色如何,它都会突出显示它们。感谢您的帮助。
我用来查找重复项的脚本是:
//================================
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{name : "Check Duplicates",functionName : "checkDuplicates"}];
sheet.addMenu("Scripts", entries);
};
function checkDuplicates() {
var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getRange("L:L"); // Set Any Range
// "L:L" is for Columns L
// And if you want to check duplicates for whole sheet then try this:
// var dataRange = sheet.getDataRange();
var data = dataRange.getValues();
var numRows = data.length;
var numColumns = data[0].length;
var formats = [];
var values = [];
for (var i = 0; i < numRows; i++) {
formats[i] = [];
for (var j = 0; j < numColumns; j++) {
formats[i][j] = 'WHITE';
if (data[i][j] != '') {
values.push([data[i][j], i, j]);
}
}
}
var numValues = values.length;
for (var k = 0 ; k < numValues - 1; k++) {
if (formats[values[k][1]][values[k][2]] == 'WHITE') {
for (var l = k + 1; l < numValues; l++) {
if (values[k][0] == values[l][0]) {
formats[values[k][1]][values[k][2]] = 'YELLOW';
formats[values[l][1]][values[l][2]] = 'YELLOW';
}
}
}
}
dataRange.setBackgroundColors(formats);
}
//================================
我不熟悉 Google Drive 的脚本,所以我不确定如何修改以添加格式要求。
在字体颜色为黑色的 L 列中突出显示重复项:
被视为重复的单元格必须具有相同的值和黑色字体颜色。
function checkDuplicates() {
var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getRange("L1:L" + sheet.getLastRow());
dataRange.setBackground("white");
var data = dataRange.getValues();
var colors = dataRange.getFontColors();
var numRows = data.length;
var highlights = dataRange.getBackgrounds();
for(var r = 0; r < data.length; r++) {
data[r].push(colors[r][0]);
data[r].push(r);
}
data.sort();
for(var r = 0; r < data.length - 1; r++) {
if(data[r][0] && data[r][1] == "#000000") {
if(data[r][0] == data[r+1][0] && data[r+1][1] == "#000000") {
highlights[data[r][2]][0] = "yellow";
highlights[data[r+1][2]][0] = "yellow";
}
}
}
dataRange.setBackgrounds(highlights);
}
如果这不是您想要的,请告诉我。
L3 和 L6 突出显示。 L2 & L5 不是。
我需要一个脚本来在我的 Google 驱动器 Sheet 中查找格式完全相同的重复项。具体来说,一列中可能有重复的数据,但一个实例应该是红色的,另一个实例应该是黑色的。我想突出显示两个实例均为黑色的单元格。我有一个脚本来查找重复项,但无论文本颜色如何,它都会突出显示它们。感谢您的帮助。
我用来查找重复项的脚本是:
//================================
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{name : "Check Duplicates",functionName : "checkDuplicates"}];
sheet.addMenu("Scripts", entries);
};
function checkDuplicates() {
var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getRange("L:L"); // Set Any Range
// "L:L" is for Columns L
// And if you want to check duplicates for whole sheet then try this:
// var dataRange = sheet.getDataRange();
var data = dataRange.getValues();
var numRows = data.length;
var numColumns = data[0].length;
var formats = [];
var values = [];
for (var i = 0; i < numRows; i++) {
formats[i] = [];
for (var j = 0; j < numColumns; j++) {
formats[i][j] = 'WHITE';
if (data[i][j] != '') {
values.push([data[i][j], i, j]);
}
}
}
var numValues = values.length;
for (var k = 0 ; k < numValues - 1; k++) {
if (formats[values[k][1]][values[k][2]] == 'WHITE') {
for (var l = k + 1; l < numValues; l++) {
if (values[k][0] == values[l][0]) {
formats[values[k][1]][values[k][2]] = 'YELLOW';
formats[values[l][1]][values[l][2]] = 'YELLOW';
}
}
}
}
dataRange.setBackgroundColors(formats);
}
//================================
我不熟悉 Google Drive 的脚本,所以我不确定如何修改以添加格式要求。
在字体颜色为黑色的 L 列中突出显示重复项: 被视为重复的单元格必须具有相同的值和黑色字体颜色。
function checkDuplicates() {
var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getRange("L1:L" + sheet.getLastRow());
dataRange.setBackground("white");
var data = dataRange.getValues();
var colors = dataRange.getFontColors();
var numRows = data.length;
var highlights = dataRange.getBackgrounds();
for(var r = 0; r < data.length; r++) {
data[r].push(colors[r][0]);
data[r].push(r);
}
data.sort();
for(var r = 0; r < data.length - 1; r++) {
if(data[r][0] && data[r][1] == "#000000") {
if(data[r][0] == data[r+1][0] && data[r+1][1] == "#000000") {
highlights[data[r][2]][0] = "yellow";
highlights[data[r+1][2]][0] = "yellow";
}
}
}
dataRange.setBackgrounds(highlights);
}
如果这不是您想要的,请告诉我。
L3 和 L6 突出显示。 L2 & L5 不是。