Google脚本根据另一个单元格的值为单元格着色

时间:2019-04-21 23:13:25

标签: google-apps-script google-sheets gs-conditional-formatting

我正在尝试根据一列中一个单元格的颜色是否大于另一个单元格(同一行)来更改其颜色

我已经设置了条件格式设置,但是当我在工作表中复制粘贴时,公式变得混乱,因此我希望对gs做同样的事情。

我发现我需要使用# Allocate for the number of rows needed results <- matrix(nrow = rows) for (name in names(data[[1]])) { # Data processing # Append the results to the working data results <- cbind(results, df) } # Drop the first placeholder column created upon allocation results <- results[, -1]; https://developers.google.com/apps-script/guides/triggers/#Simple)来获取每次单元格更改时更新的更改。

从另一个问题中获得了一些代码,但是我在getRange中遇到了错误。

onEdit()

我在值中选择的范围是P2:P243,在values_now E2:E243中,这最后一个范围是我希望为单元格着色的范围。

  • 因此,如果P2大于E2,则E2应该为蓝色
  • 如果P32小于E32,则E32应该为红色。等等...

1 个答案:

答案 0 :(得分:1)

此修改如何?此修改后的脚本的流程如下。请认为这只是几个答案之一。

  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);
}