首页 > 解决方案 > 自动文本颜色取决于背景颜色 [google sheet]

问题描述

我有脚本设置单元格背景取决于下拉列表中的选定项目。有很多颜色可供选择。其中一些是深色的,因此深色文本是不可见的。有没有办法自动设置文本颜色与背景形成对比?

标签: google-apps-scriptgoogle-sheets

解决方案


如果您正在设置背景颜色,那么您可以同时设置字体颜色。我认为您的问题是“我如何自动找到与背景颜色形成对比的字体颜色”。

这有一个很长的答案,这里有很多代码。

有多种方法可以使用 rgb 值的十六进制表示来查找与指定颜色互补的颜色。

最简单的方法是对 RGB 值进行逻辑补充 - 它不一定令人愉悦,但它应该具有足够的对比度以清晰易读:

function getOppositeColor(color) {
  // color comes in as #AAAAAA
  // step one - convert to a number - 0xAAAAAA
  var hex = '0x' + color.split("#")[1];
  var backgroundColor = parseInt(hex, 16);

  // take the logical compliment of it 0x000000 -> 0xffffff  
  var complement = 0xffffff ^ backgroundColor;

  // convert compliment to hex
  var complementHex = complement.toString(16);

  // complement Hex needs to be padded to 6 hex digits
  var padding = "";
  if (complementHex.length < 6) {
     padding = Array(6 - complementHex.length + 1).join("0");
  }

  var opposite = "#" + padding + complementHex;

  return opposite;  
}

这个简单的测试将为当前单元格设置对比字体颜色:

function setComplimentaryColor() {

  var cell = SpreadsheetApp.getActiveSheet().getActiveCell();
  var background = cell.getBackground();

  var opposite = getOppositeColor(background);

  cell.setFontColor(opposite);
}

推荐阅读