Подтвердить что ты не робот

Автоматическая раскраска Google Spreadsheet

Я ищу способ автоматического изменения цвета минимальной ячейки в строке таблицы google docs.

Итак, для таблицы типа

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

Он будет окрашивать все ячейки с "1" в них.

4b9b3361

Ответ 1

В выпадающем меню Format- > Conditional formatting...

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

Edit:

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

Ответ 2

Хитрость заключается в том, чтобы задействовать триггер события onEdit и добавить некоторый интеллект

На первый взгляд, я думал, что условное форматирование будет работать, но минимальное количество строк слишком сложно для стандартного условного форматирования. Это немного сложно понять, но это можно сделать.

Здесь полный script (проверенный и работающий):

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, чтобы вызвать script с изменениями в таблице.

function onEdit()

Именование функции onEdit автоматически узнает, что вы хотите переопределить действие onEdit.

Примечание. Обработчики событий в Документах немного сложны. Поскольку документы могут обрабатывать несколько одновременных изменений несколькими пользователями, обработчики событий обрабатываются на стороне сервера. Основная проблема с этой структурой заключается в том, что при сбое события script он терпит неудачу на сервере. Если вы хотите просмотреть информацию об отладке, вам нужно будет установить явный триггер в меню триггеров, который отправит вам информацию об отладке, когда событие завершится неудачно, или иначе оно будет терпеть неудачу.

Извлеките номер строки:

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 устанавливает ограничение на выполнение script. Кэшируя значения, вы сохраняете сервер от много лишних раундов, чтобы получить значения из электронной таблицы.

Следующие две части, где происходит вся магия.

Сначала мы пропустим все ячейки строки, чтобы найти минимальное значение.

  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 не могут сделать.

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