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

Google Apps Script setValue() AND setBackgroundRGB() for the same cell

我正在尝试对同一个单元格同时使用 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,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,0);
          }
        }
     }

}

active_sheet 未在您的代码中定义,Range.setBackgroundRGB() and 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,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).setBackgroundRGB(255,0,0);
          }
        }
     }

}

输出:


关于您的其他问题:是否可以在不使用活动单元格的情况下在特定列中工作?

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

示例:

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