Я ищу способ автоматического изменения цвета минимальной ячейки в строке в Google Sheets. Итак, для таблицы типа:
1 | 2 | 3
4 | 2 | 1
2 | 1 | 6
это окрасит все ячейки с 1
в них.
Я ищу способ автоматического изменения цвета минимальной ячейки в строке в Google Sheets. Итак, для таблицы типа:
1 | 2 | 3
4 | 2 | 1
2 | 1 | 6
это окрасит все ячейки с 1
в них.
В выпадающем меню Формат->Условное форматирование...
Затем установите свои правила и свой цвет. Вы можете выбрать несколько ячеек и сделать это тоже.
Редактировать:
Это то, что вы можете сделать с окраской. Возможно, вы можете найти сложную формулу, чтобы найти минимум ячеек, а затем, если она соответствует тому, что находится в ячейке, затем раскрасить ее, но вы можете использовать Excel вместо документов Google, если это критично для вас.
Format
-> Conditional formatting...
-> Color Scale
.
- person Stephen Blum; 04.12.2015
Хитрость заключается в том, чтобы подключиться к триггеру события 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 Документов они выполняются на стороне сервера, поэтому для предотвращения злоупотреблений Google ограничивает время выполнения сценариев. Кэшируя значения, вы избавляете сервер от множества ненужных обходов для извлечения значений из электронной таблицы.
В следующих двух частях происходит вся магия.
Сначала мы делаем проход по всем ячейкам строки, чтобы найти минимальное значение.
var val = 999;
for(var i = 0; i < cols; i++) {
if(val > rowValues[0][i] && rowValues[0][i] !== "") {
val = rowValues[0][i];
}
}
Для простоты я установил потолок по умолчанию 999. Это может быть изменение на более подходящее значение. Хитрость заключается в том, чтобы проверить значение по сравнению с текущим минимумом. Если оно ниже, то отметьте новое минимальное значение.
Вы можете легко отделаться, пометив номер ячейки наименьшим значением и установив его явно, но я хотел охватить случаи, когда несколько ячеек имеют наименьшее значение.
Обработка нескольких ячеек, содержащих минимум, требует второго прохода:
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 Apps Scripting работает со ссылками на электронные таблицы и ячейки данных, но Docs не так много может сделать.
Я создал общедоступную ссылку на электронную таблицу. используется для написания/тестирования этого кода. Не стесняйтесь попробовать это.