当单元格包含该颜色名称时更改背景颜色

时间:2016-08-10 14:14:18

标签: javascript google-sheets

我有一张Google Sheet文档,我将其用作工作计划。我目前正在使用以下脚本来排序和更改整个行背景,具体取决于列中的数字" K&#34 ;;但是,我现在想知道如何改变只有列的背景颜色"我"取决于那里键入的内容。例如,如果我键入" Red"在该列中,我希望仅将该单个单元格的背景更改为红色。

我知道这可以使用条件格式轻松完成,但是我不断在此工作表中添加新行并将其他行移到另一页,因此条件格式很快就会丢失哪个范围以正确应用它(如果有意义的话)

谢谢!

function onEdit(e) {
  if(e.range.columnStart === 11) {  
    // color the row according to the color codes and logic shown below 
    var refs = [14, "#93c47d", 15, " #00ffff", 16, "#f4c432", 17, "#ff00ff", 20, "#ffff00", ,"#ffffff"], index;

    if(e.value >= 1 && e.value < 14) {
      index = 0;
    } else if(refs.indexOf(Number(e.value)) !== -1) {
      index = refs.indexOf(Number(e.value));
    } else {
      index = refs.length - 2;
    } 

    var r = e.range.rowStart, A1 = r + ":" + r;
    e.source.getRange(A1).setBackground(refs[index + 1]);

    // sort the range after coloring
    e.source.getRange("A:K").sort({column: 11});  
  }
}

1 个答案:

答案 0 :(得分:0)

输入if后我要做的第一件事就是让你的refs成为一个对象而不是一个数组:

var refs = {
 green: "#93c47d",
 aqua: "#00ffff",
 orange: "#f4c432",
 magenta:"#ff00ff",
 yellow: "#ffff00"
};

然后,您可以根据对象中键的存在来获得所需的颜色,即当您键入&#39; orange&#39;你拉出与它相关的颜色值,#f4c432。这样你就不必记住颜色代码。

var color;
if(refs[e.value]){  // If this key exists, use its value
  color = refs[e.value];
} else {
  color = "#ffffff";  // Default value
}

最后,您可以设置行的颜色:

var row = e.range.getRow();
e.source.getRange(row,1,1,e.source.getMaxColumns()).setBackground(color);

完成排序。