Google脚本根据其他单元格值为单元格着色

问题描述 投票:1回答:1

我试图改变列中单元格的颜色,基于它是否大于或不是另一个单元格(在同一行)

如果条件格式化,我已经设置了这个,但是当我在工作表中进行copypaste时,公式会被弄乱,因此我希望对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应为红色。等......
google-apps-script google-sheets gs-conditional-formatting
1个回答
1
投票

这个修改怎么样?此修改脚本的流程如下。请将此视为几个答案中的一个。

  1. 从单元格中检索值。
  2. 将红色和蓝色的坐标放在一个数组中。
  3. 将检索到的坐标应用于单元格。

Modified script:

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?
}

Note:

  • 在这个修改过的脚本中,当列“E”和“P”的值相同时。背景颜色不会改变。

References:

如果我误解了你的问题并且这不是你想要的结果,我道歉。

编辑:

作为其他示例脚本,当使用setBackgrounds()时,脚本如下。

Sample script:

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.