Автоматическое окрашивание определенного значения, где бы оно ни находилось в таблице

Я ищу способ автоматического изменения цвета минимальной ячейки в строке в Google Sheets. Итак, для таблицы типа:

1 | 2 | 3
4 | 2 | 1
2 | 1 | 6

это окрасит все ячейки с 1 в них.


person Verhogen    schedule 05.06.2009    source источник
comment
Не обязательно связанный с программированием..   -  person JasonV    schedule 06.06.2009
comment
Условное форматирование, даже если оно выполняется через пользовательский интерфейс, связано с программированием, поскольку требует анализа проблемы, чтобы определить набор правил таким образом, чтобы компьютер мог выполнить задачу. Учитывая это, я думаю, что этот вопрос должен быть вновь открыт.   -  person Rubén    schedule 06.10.2016


Ответы (2)


В выпадающем меню Формат->Условное форматирование...

Затем установите свои правила и свой цвет. Вы можете выбрать несколько ячеек и сделать это тоже.

Редактировать:

Это то, что вы можете сделать с окраской. Возможно, вы можете найти сложную формулу, чтобы найти минимум ячеек, а затем, если она соответствует тому, что находится в ячейке, затем раскрасить ее, но вы можете использовать Excel вместо документов Google, если это критично для вас.

person Kekoa    schedule 05.06.2009
comment
ЕСЛИ вы не можете выполнить то, что вам нужно, используя условное форматирование, вы всегда можете использовать редактор сценариев, чтобы изменить событие onEdit, чтобы проверить ячейку и изменить цвет в зависимости от любого условия, которое вы можете себе представить. Нет необходимости (или использования) для Excel. - person Evan Plaice; 29.12.2011
comment
Это изменилось с 2015 года, но это дало мне то, что мне было нужно! Теперь вы можете нажать Format -> Conditional formatting... -> Color Scale. - person Stephen Blum; 04.12.2015
comment
@Kekoa Круто, спасибо за обновление. - person Evan Plaice; 15.04.2016
comment
Есть ли способ автоматически просто использовать форматирование существующего списка? Создавать правила одно за другим утомительно. - person john; 23.04.2017

Хитрость заключается в том, чтобы подключиться к триггеру события 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 не так много может сделать.

Я создал общедоступную ссылку на электронную таблицу. используется для написания/тестирования этого кода. Не стесняйтесь попробовать это.

person Evan Plaice    schedule 02.01.2012