Google скрипт для раскраски ячейки на основе значения другой - PullRequest
1 голос
/ 22 апреля 2019

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

Я настроил это, если используется условное форматирование, но формулызапутаться, когда я копирую пасту на листе, поэтому я собираюсь сделать то же самое с gs.

Я обнаружил, что мне нужно использовать onEdit() (https://developers.google.com/apps-script/guides/triggers/#Simple), чтобы получить измененияобновляется при каждом изменении ячейки.

И получил некоторый код из других вопросов здесь, но я получаю ошибку в getRange.

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Programar');
  var values = sheet.getRange(2, 16, 3).getValues();
  var values_now = sheet.getRange(2, 5, 3).getValues();
  var color = '';  
  var current_row = 2
  for (var i = 0; i < values.length; i++)
  {

    if (values_now[i][0] > values[i][0])
    {
            SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
    .alert(values_now[i][0] + ' ' + values[i][0]);
      color='#FFDD88'
    }
    else if (values_now[i][0] < values[i][0])
    {
      color = '#CC6666'
    }
    sheet.getRange(current_row, 5).setBackgroundColor(color);
    current_row++
  }

}

Диапазон, который я выбираю в значениях, - это P2:P243 и в values_now E2: E243, этот последний диапазон - тот, который мне нравится окрашивать в ячейке.

  • Так что, если P2 больше, чем E2, E2 должен быть синим
  • ЕслиP32 меньше, чем E32, E32 должно быть красным. И так далее ...

1 Ответ

1 голос
/ 22 апреля 2019

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

  1. Извлечение значений из ячеек.
  2. Поместите координаты красного и синего в массив.
  3. Применитьизвлеченные координаты к ячейкам.

Модифицированный скрипт:

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Programar');
  var values = sheet.getRange("E2:P243").getValues();
  var colorToRed = [];
  var colorToBlue = [];
  for (var i = 0; i < values.length; i++) {
    var e = values[i][0];
    var p = values[i][11];
    if (e > p) {
      colorToRed.push("E" + (i + 2));
    } else if (e < p) {
      colorToBlue.push("E" + (i + 2));
    }
  }
  sheet.getRangeList(colorToRed).setBackground("#FFDD88"); // #FFDD88 is used as red?
  sheet.getRangeList(colorToBlue).setBackground("#CC6666"); // #CC6666 is used as blue?
}

Примечание:

  • В этом модифицированном скрипте, когда значения столбца "E "и" P "одинаковы.Цвет фона не изменяется.

Ссылки:

Если я неправильно понял ваш вопрос, и это был не тот результат, который вы хотите, я приношу свои извинения.

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

Как и в другом примере сценария, когда setBackgrounds()используется следующий сценарий.

Пример сценария:

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Programar');
  var values = sheet.getRange("E2:P243").getValues();
  var colors = [];
  for (var i = 0; i < values.length; i++) {
    var e = values[i][0];
    var p = values[i][11];
    if (e > p) {
      colors.push(["#FFDD88"]); // #FFDD88 is used as red?
    } else if (e < p) {
      colors.push(["#CC6666"]); // #CC6666 is used as blue?
    } else {
      colors.push([""]);
    }
  }
  sheet.getRange(2, 5, colors.length, 1).setBackgrounds(colors);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...