Хитрость заключается в том, чтобы нажать на курок onEdit событий и добавить интеллект
На первый взгляд, я думал, условное форматирование будет работать, но минимум за рядами немного слишком сложным для стандартного условного форматирования , Это немного сложно понять, но это можно сделать.
Вот полный скрипт (проверено и работает):
function onEdit() {
var s = SpreadsheetApp.getActiveSheet();
var r = s.getActiveRange();
var row = r.getRow();
var cols = s.getDataRange().getNumColumns();
// crate a range for the row using getRange(row, column, numRows, numColumns)
var rowRange = s.getRange(row, 1, 1, cols);
var rowValues = rowRange.getValues();
// check all the values in the row
var val = 999;
for(var i = 0; i < cols; i++) {
if(val > rowValues[0][i] && rowValues[0][i] !== "") {
val = rowValues[0][i];
}
}
for(var j = 0; j < cols; j++) {
if(rowValues[0][j] === val) {
s.getRange(row,(j + 1)).setFontColor("blue");
} else {
s.getRange(row,(j + 1)).setFontColor("black");
}
}
}
Сначала касание в обработчик события onEdit для запуска сценария с изменениями электронных таблиц.
function onEdit()
Признав функцию onEdit, она автоматически узнает, что вы хотите переопределить действие onEdit.
Примечание. Обработчики событий в Документах немного сложны. Поскольку документы могут обрабатывать несколько одновременных изменений несколькими пользователями, обработчики событий обрабатываются на стороне сервера. Основная проблема с этой структурой заключается в том, что при сбое сценария запуска событий он терпит неудачу на сервере. Если вы хотите просмотреть информацию об отладке, вам нужно настроить явный триггер в меню триггеров, который отправляет вам информацию об отладке, когда событие терпит неудачу, иначе он будет терпеть неудачу.
Извлекает номер строки:
var r = s.getActiveRange();
var row = r.getRow();
говорит само за себя здесь. Активным диапазоном является редактируемая ячейка.
захватить количество столбцов:
var cols = s.getDataRange().getNumColumns();
Вы должны проверить диапазон данных для всей таблицы для этого.
Далее вам необходимо построить ряд данных, содержащий данные для строки в вопросе:
var rowRange = s.getRange(row, 1, 1, cols);
Читать комментарии в коде, чтобы увидеть, какие значения должны быть.
Затем мы кэшировать результаты тестирования значений:
var rowRange = s.getRange(row, 1, 1, cols);
Из-за природы Google Docs обратных вызовов сценариев событий запуска на стороне сервера так, чтобы предотвратить злоупотребления, Google ставит ограничения по времени выполнения скрипта. Кэшируя значения, вы сохраняете сервер от много лишних раундов, чтобы получить значения из электронной таблицы.
Следующие две части, где происходит вся магия.
Сначала мы пропустим все ячейки строки, чтобы найти минимальное значение.
var val = 999;
for(var i = 0; i < cols; i++) {
if(val > rowValues[0][i] && rowValues[0][i] !== "") {
val = rowValues[0][i];
}
}
Я установил по умолчанию потолок 999 для простоты. This could be change to a more appropriate value. Фокус в том, чтобы проверить значение против текущего минимума. Если он ниже, то отметьте новое низкое значение.
Вы могли бы легко разрядиться, указав номер ячейки с наименьшим значением и установив его явно, но я хотел рассмотреть случаи, когда несколько ячеек имеют самое низкое значение.
Обработка нескольких ячеек, содержащих минимум требует второго прохода:
for(var j = 0; j < cols; j++) {
if(rowValues[0][j] === val) {
s.getRange(row,(j + 1)).setFontColor("blue");
} else {
s.getRange(row,(j + 1)).setFontColor("black");
}
}
Цикла через все ячейки в строке остается тем же самым. На этот раз мы просто проверяем, соответствуют ли значения ячеек выбранному минимуму. Если он совпадает, цвет шрифта меняется на синий. В противном случае цвет шрифта будет изменен на черный.
Это о суммах. Немного сложно привыкнуть к тому, как Google Scripting имеет дело со ссылками на электронные таблицы и ячейки данных, но Doc не так много делает.
Я сделал public link в таблицу, которую я использовал для написания/проверки этого кода. Не стесняйтесь попробовать.
Не обязательно связанное с программированием .. – JasonV
Условное форматирование, даже если это выполняется через пользовательский интерфейс, связано с программированием, так как требует анализа проблемы, чтобы определить набор правил таким образом, чтобы компьютер мог выполнять задача. Учитывая это, я считаю, что этот вопрос должен быть вновь открыт. –
Выделите все ячейки и примените собственную формулу: '= и (not (isblank (A1)), A1 = min (1: 1))' – pnuts