Спрашивающий ссылается на предыдущие вопросы и ответы, которые были основаны на оценке числа. В случае спрашивающих оценка основана на строке.
Я сослался на вопрос, отмеченный Ответчиком. Я также сослался на Как сравнить строки в скрипте приложений Google , который содержит очень элегантный и эффективный подход Гарольда , который я провел в этом ответе. При этом используется indexof
для обнаружения новых значений, поэтому подчеркивание может быть связано с каждым новым значением.
function so53053492() {
//setup spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
// get key variables
var LastRow = sheet.getLastRow();
var LastColumn = sheet.getLastColumn();
//erase any current formatting
var ClearRange = sheet.getRange(1, 1, LastRow, LastColumn).setBorder(false, false, false, false, false, false); // clear all formatting
// get the data
var data = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues();
// setup new array
var ListofFruits = new Array();
// Loop through the fruits (Column A)
for (var i in data) {
var row = data[i][0].toString();
// search for unqiue values
if (ListofFruits.indexOf(row) == -1) { // if value =-1, then the variable is unique
// Logger.log(row+" is not referenced. Adding it");//DEBUG
// underline the previous row
var range = sheet.getRange((+i + 1), 1, 1, 2).setBorder(true, false, false, false, false, false, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM); // format if true
// continue to build array
ListofFruits.push(row);
}
}
// underline the last row of the fruits column
var range = sheet.getRange(LastRow, 1, 1, LastColumn).setBorder(null, null, true, null, false, false, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM); // format if true
// Logger.log(ListofFruits);// DEBUG
}
ОБНОВЛЕНИЕ - Учет заголовков
Предыдущая версия не предполагала заголовков. Эта версия учитывает заголовки. Имеется несколько строк кода, но ключевой переменной является headerRows
, которая позволяет пользователю назначать глубину заголовков.
function so53053492_01() {
//setup spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet3");
// get key variables
var LastRow = sheet.getLastRow();
var LastColumn = sheet.getLastColumn();
var NumColumns = sheet.getMaxColumns();
// allow for headers
var headerRows = 2;
//erase any current formatting
var ClearRange = sheet.getRange(1, 1, LastRow, NumColumns).setBorder(false, false, false, false, false, false); // clear all formatting
// get the data
var data = sheet.getRange((+1 + headerRows), 1, (LastRow - headerRows), LastColumn).getValues();
// setup new array
var ListofFruits = new Array();
// Loop through the fruits (Column A)
for (var i in data) {
var row = data[i][0].toString();
// Logger.log("Inside LOOP: i = "+i+", value = "+ row);// DEBUG
// search for unqiue values
if (ListofFruits.indexOf(row) == -1) { // if value =-1, then the variable is unique
// Logger.log("Inside IF#1: i = "+i+", "+row+" is not referenced. Adding it");//DEBUG
// underline the previous row
if (i != 0) {
// This IF statement to avoid underlining the Header row
var range = sheet.getRange((+i + 1 + headerRows), 1, 1, NumColumns).setBorder(true, false, false, false, false, false, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM); // format if true
}
// continue to build array
ListofFruits.push(row);
}
}
// underline the last row of the fruits column
var range = sheet.getRange(LastRow, 1, 1, NumColumns).setBorder(null, null, true, null, false, false, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM); // format if true
//Logger.log(ListofFruits);// DEBUG
}
Снимок экрана с заголовками: