获取该函数当前正在

时间:2016-11-01 15:09:29

标签: google-apps-script

所以我正在尝试制作一个谷歌电子表格,用不同的颜色填充每个单元格,由RGB值决定我稍后会弄清楚。最终结果将是工作表将是我可以在其他地方使用的调色板。

问题是我无法弄清楚如何使下面的函数(colorHex)将setBackgroundColor函数应用于它当前正在运行的单元格。

我基本上想把= colorCell(254,108,72)做成一个单元格,那个单元格的背景颜色会变成那种颜色。所以我确定这是一个相当简单的问题,但每当我查看如何引用单元格时,我还没有看到一个使用函数运行的单元格的示例。

帮助?

function colorCell(r,g,b) {
  var colorCode = colorHex(decimalToHex(r,1), decimalToHex(g,1), decimalToHex(b,1));
  // setBackgroundColor(colorCode); Where the magic will happen, hopefully
}

function decimalToHex(d, padding) {
    var hex = Number(d).toString(16);
    var hex = hex.toUpperCase();
    padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;

    while (hex.length < padding) {
        hex = "0" + hex;
    }

    return hex;
}

function colorHex(r,g,b) {
  var hexcode = "#";
  var hexcode = hexcode.concat(r,g,b);
  return hexcode;
}

1 个答案:

答案 0 :(得分:1)

电子表格的自定义功能必须是无副作用的,即只返回一个值 您可以做的是在单元格中输入RGB或Hex代码,并使用onEdit脚本进行着色。

function onEdit(e) {
  color = e.value.split(",");
  e.range.setBackgroundRGB(color[0], color[1], color[2]);
}

您还可以遍历工作表中的所有单元格,并尝试根据内容为它们着色。

function onEdit(){
  var range = SpreadsheetApp.getActiveSheet().getDataRange();
  var data = range.getValues();

  data.forEach(function(row, rowI) {
    row.forEach(function(cell, colI) {
      try {
        var color = cell.split(",");
        range.getCell(rowI+1, colI+1).setBackgroundRGB(color[0], color[1], color[2]);
      } catch(ex) {}
    });
  });
}