![](/img/trans.png)
[英]Change cell value based on the cell's background color in Google Sheets
[英]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.