同一单元格的 Google Apps 脚本 setValue() 和 setBackgroundRGB()

问题描述

我正在尝试对同一个单元格同时使用 setValue 和 setBackgroundRGB 方法,但它不起作用。 实际上,只有 setValue 有效。我尝试了以下 if-else 条件的 3 种不同方式,但我总是只看到数字,背景颜色没有任何变化。如果我删除数字,只有这样我才能看到颜色。同一个单元格可以同时拥有两者吗?

(另外,有没有办法在不使用活动单元格的情况下在特定列中工作?)

function onEdit(e) {
  var active_cell = e.range;
  var active_column = active_cell.getColumn();

      if(active_sheet.getName().startsWith("202")){
        var in_row= 5;
        var exp_row= 6;
        var diff_row = 7;
    
        var income = active_sheet.getRange(in_row,active_column).getValue();
        var expenses = active_sheet.getRange(exp_row,active_column).getValue();
        var diff = income - expenses;
    
        if (active_column >= 2){
          if(income > expenses) {
            active_sheet.getRange(diff_row,active_column).setBackgroundRGB(255,0).setValue(diff);
          } else if (income == expenses) {
            active_sheet.getRange(diff_row,active_column).setValue(diff).setBackgroundRGB(0,255,0);
          } else {
            active_sheet.getRange(diff_row,active_column).setValue(diff);
            active_sheet.getRange(diff_row,active_column).set.setBackgroundRGB(255,0);
          }
        }
     }

}

解决方法

active_sheet 未在您的代码中定义,Range.setBackgroundRGB()Range.setValue() 在您的任一组合中均按预期工作。

更新代码:

function onEdit(e) {
  var active_sheet = e.source.getActiveSheet();
  var active_cell = e.range;
  var active_column = active_cell.getColumn();

      if(active_sheet.getName().startsWith("202")){
        var in_row= 5;
        var exp_row= 6;
        var diff_row = 7;
    
        var income = active_sheet.getRange(in_row,active_column).getValue();
        var expenses = active_sheet.getRange(exp_row,active_column).getValue();
        var diff = income - expenses;
    
        if (active_column >= 2){
          if(income > expenses) {
            active_sheet.getRange(diff_row,active_column).setBackgroundRGB(255,0).setValue(diff);
          } else if (income == expenses) {
            active_sheet.getRange(diff_row,active_column).setValue(diff).setBackgroundRGB(0,255,0);
          } else {
            active_sheet.getRange(diff_row,active_column).setValue(diff);
            active_sheet.getRange(diff_row,0);
          }
        }
     }

}

输出:

enter image description here


关于您的另一个问题:有没有办法在不使用活动单元格的情况下在特定列中工作?

  • 是的,您可以选择特定列作为您的范围,而无需使用活动单元格的列索引。您只需要在使用 Sheet.getRange(row,column) 选择范围时提供硬编码的列索引。

示例:

var income = active_sheet.getRange(in_row,4).getValue();
  • 在这里,我将访问 D 列(位于索引 4 中)中的单元格。