繁体   English   中英

根据值更改单元格背景颜色onEdit

[英]Change cell background color onEdit based on value

如何根据onEdit()函数中的单元格内容更改单元格背景颜色?

我已经测试了很多版本的代码 - 有些代码工作得很好,有些代码根本没用。 但我还没有按照我需要的方式让它工作。

请原谅我写的方式缺乏优雅,但实际上我需要保持代码尽可能简单,因为会有很多单元格更改,许多条件,以及许多不同数量的单元格将根据什么进行更改在工作表上更改。

好的,所以这里......

function onEdit(event)
{
 var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");   
 var changedCell= event.source.getActiveRange().getA1Notation();

 if (changedCell == 'B3') {
 var c = ss.getRange("B3").getValue();
  if (c < 2); {
  ss.getRange("B3").setBackgroundColor('#ff0000');  
  ss.getRange("B12").setBackgroundColor('#ff0000'); 
  }
  if (c > 1); {
  ss.getRange("B3").setBackgroundColor('#000000');  
  ss.getRange("B12").setBackgroundColor('#000000'); 
  }
 }
}

有几点需要注意

1.方法的名称是setBackground而不是setBackgroundColor

2.如何格式化单元格B3。 仅当比较格式为整数时才进行比较。 在大多数情况下,Google Spreadsheet会根据数据类型自动格式化单元格,但如果我正在编写代码,我会仔细检查。 所以使用类似的东西

 var c = parseInt(ss.getRange("B3").getValue()) ;

3. if条件后不需要分号。 这将立即终止if条件。 所以使用

if (c < 2) {

if (c > 1) {

4.最后,我不知道数据是如何进入B3的,但是如果你在B3中有1.5,那么两个if条件都会变为真,你的背景颜色会被覆盖。 所以,我建议你使用if..elseif

为了更好的可读性,我将使用setBackground('red')setBackground('white')作为常见颜色。

除了Srik的建议之外,您还应该考虑onEdit()函数的效率。 一般的想法是确定是否应尽快和尽可能便宜地纾困,然后根据最佳实践优化其余代码(主要是最小化服务调用)。

看起来你想要onEdit()仅在“Sheet2”上执行,但是你编写它的方式,它将触发任何工作表上的更改,但是在“Sheet2”上onEdit() (不是一个明显的问题,因为“Sheet2”上的条件是用于决定着色的条件,但是你将不必要地烧掉脚本执行时间。)通过使用event信息来确定哪些工作表已更新,并且如果它不是“Sheet2”则退出, onEdit()的成本会下降。

我同意Srik的if声明......我只是不知道你想要什么。 我不认为else if单独的else if建议会解决它,因为它会将c > 1视为c > 2 ......如果你想要它,为什么不写呢? 也许你想没有颜色1 < c < 2用红色的c < 1黑色( c > 2 你应该理清那部分的逻辑。

以下是优化的onEdit()外观,最大限度地利用了event信息:

function onEdit(event)
{
  var ss = event.range.getSheet();
  if (ss.getName() !== "Sheet2") return; // Get out quickly
  var changedCell = event.source.getActiveRange();
  var changedCellA1 = changedCell.getA1Notation();
  if (changedCellA1 !== 'B3') return;

  var c = event.value;  // We know we edited cell B3, just get the value
  var background = 'white'; // Assume 1 <= c <= 2
  if (c > 2) {
    background = 'red';
  }
  else if (c < 1) {
    background = 'black'; 
  }
  changedCell.setBackground(background);
  ss.getRange("B12").setBackground(background);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM