Я хотел бы предложить вам сделать весь материал в массиве цветов фона у вас уже есть вместо того, чтобы Вызов сервиса электронной таблицы каждый раз, когда условие истинно.
код становится проще, потому что я использовал метод массива IndexOf в состоянии
function MakeRed(){
var book = SpreadsheetApp.getActiveSpreadsheet();
var sheet = book.getActiveSheet();
var first_column = "B";
var first_row = 1;
var last_row = sheet.getLastRow();
var last_column = sheet.getLastColumn();
var active_row = 1;
var range_input = sheet.getRange(1,1,last_row,last_column);
var range_output = sheet.getRange("A1");
var cell_colors = range_input.getBackgroundColors();
var color = "#ff0000";
var count = 0;
for(var r = 0; r < cell_colors.length; r++) {
Logger.log(cell_colors[r].indexOf(color));// just to check, you can remove this of course ...
if(cell_colors[r].indexOf(color)>-1) {
count++;
cell_colors[r][0]=color;
} else {
count--;
if (count == 0) {
cell_colors[r][0]="#ffffff";
}
}
}
range_input.setBackgroundColors(cell_colors);// update sheet colors
}
EDIT: Я не очень понимаю, идея позади «счета» вещь ... это работает так же, как и без него (код ниже):
function MakeRed(){
var book = SpreadsheetApp.getActiveSpreadsheet();
var sheet = book.getActiveSheet();
var first_column = "B";
var first_row = 1;
var last_row = sheet.getLastRow();
var last_column = sheet.getLastColumn();
var active_row = 1;
var range_input = sheet.getRange(1,1,last_row,last_column);
var range_output = sheet.getRange("A1");
var cell_colors = range_input.getBackgroundColors();
var color = "#ff0000";
for(var r = 0; r < cell_colors.length; r++) {
Logger.log(cell_colors[r].indexOf(color))
if(cell_colors[r].indexOf(color)>-1) {
cell_colors[r][0]=color;
} else {
cell_colors[r][0]="#ffffff";
}
}
range_input.setBackgroundColors(cell_colors);// update sheet colors
}
редактировать 2: эта версия сбросит Col A до Wh Ite, если нет других красных клеток не находятся в ряде
function MakeRed(){
var book = SpreadsheetApp.getActiveSpreadsheet();
var sheet = book.getActiveSheet();
var first_column = "B";
var first_row = 1;
var last_row = sheet.getLastRow();
var last_column = sheet.getLastColumn();
var active_row = 1;
var range_input = sheet.getRange(1,1,last_row,last_column);
var range_output = sheet.getRange("A1");
var cell_colors = range_input.getBackgroundColors();
var color = "#ff0000";
for(var r = 0; r < cell_colors.length; r++) {
var rowWoColA = cell_colors[r].slice(1);
if(rowWoColA.indexOf(color)>-1) {
cell_colors[r][0]=color;
} else {
cell_colors[r][0]="#ffffff";
}
}
range_input.setBackgroundColors(cell_colors);// update sheet colors
}
Спасибо, граф был старый кодом от первого лица, пытавшегося сделать это, он просто инкремент счетчика (код он нашел в Интернете). Это хорошо работает, только часть, которая не работает, - это если фон меняется с красного, первый столбец должен очищаться, но нет? –
Вы не упомянули об этом, не так ли? если вы хотите, я могу обновить ... –
код обновлен, теперь я проверяю цвета во всех ячейках, кроме ячеек в столбце A, поэтому он работает как ожидается (надеюсь ;-) –