Изменение цвета ячейки и шрифта

Я впервые работаю со скриптами Google. Я хочу изменить цвет фона строки и текста, когда строка содержит определенные значения. У меня был некоторый успех, используя этот фрагмент кода:

function onEdit() 
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1');
  var rows = sheet.getRange('a1:z');
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  for (var i = 0; i <= numRows - 1; i++)
  {
    var n = i+1;
    var backgroundColor;
    var textColor;

    if(values[i].indexOf('Won'))
    {
      backgroundColor = 'red';
      textColor = 'blue';
    }
    else if(values[i].indexOf('Lost'))
    {
      backgroundColor = 'green';
      textColor = 'yellow';
    }

    sheet.getRange('a'+n+':z'+n).setBackgroundColor(backgroundColor);    
    sheet.getRange('a'+n+':z'+n).setFontColor(textColor); 
  }
}

Итак, теперь строки, содержащие Выиграл, становятся зелеными с желтым текстом, а строки, содержащие Проигрыш, становятся красными с синим текстом.

Пара проблем:

  1. Каждая пустая строка также становится красной — как мне это исправить?
  2. Моя функция if/else кажется перевернутой, но работает отлично. Насколько я понимаю, если строка содержит Won, она должна стать красной с синим текстом. Может ли кто-нибудь помочь мне лучше понять эту часть?

person Code Vader    schedule 29.01.2015    source источник


Ответы (2)


Я попробовал это, и это сработало для меня, но превосходный ответ redpandasuit (в комментариях ниже) для всех, кто хочет попробовать это через условное форматирование. Вот версия кода (скрипты Google):

function onEdit() 
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('ZB Squash 2015');
  var rows = sheet.getRange('a1:z');
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  for (var i = 0; i <= numRows - 1; i++)
  {
    var n = i+1;
    var backgroundColor;
    var textColor;


      if(values[i].indexOf('Won') == -1)
      {
        backgroundColor = 'red';
        textColor = 'yellow';
      }

      if(values[i].indexOf('Lost') == -1)
      {
        backgroundColor = 'green';
        textColor = 'yellow';
      }

      if(values[i].indexOf('Won') && values[i].indexOf('Lost'))
      {
        backgroundColor = 'white';
      }

    sheet.getRange('a'+n+':z'+n).setBackgroundColor(backgroundColor);    
    sheet.getRange('a'+n+':z'+n).setFontColor(textColor); 
  }
}

Строки, в которых пользователь выиграл, теперь становятся зелеными, строки, в которых пользователь проиграл, становятся красными, а все остальные остаются белыми.

person Code Vader    schedule 02.02.2015

Я бы попробовал использовать условное форматирование, чтобы решить эту проблему. Для этого выделите нужные строки, щелкните их правой кнопкой мыши и выберите «Условное форматирование».

В раскрывающемся списке выберите Пользовательская формула и попробуйте

=RegExMatch($A1,"(?i)Выиграл")

В этой формуле A1 означает, в какой столбец вы будете вводить текст. При необходимости измените его.

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

Затем повторите процесс и добавьте вторую пользовательскую формулу для «Потерянного».

=RegExMatch($A1,"(?i)Потерян")

Эти формулы могут быть дополнительно настроены, чтобы иметь несколько триггерных слов, чувствительность к регистру и многое другое. Перейдите по этой ссылке, чтобы найти идеи: https://support.google.com/a/answer/1371417?hl=en

Надеюсь, это поможет:)

person redpandasuit    schedule 29.01.2015
comment
Привет, я пробовал что-то подобное раньше. Проблема в том, что он изменяет только текст и фон ячейки с одним/потерянным значением, а не всей строкой. - person Code Vader; 30.01.2015
comment
Привет снова. Я сделал это для тебя. Попробуйте! Введите «выигрыш» или «проигрыш» в столбце «выигрыш/проигрыш», и строка загорится! Если вы перейдете к условному форматированию, вы увидите, как происходит волшебство. Обратите внимание на диапазоны и использование нескольких диапазонов для управления тем, какие ячейки в строке окрашены, а какие нет. Надеюсь, это поможет docs.google.com/spreadsheets/d/ - person redpandasuit; 31.01.2015