1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | function rainbowTextForCalc() { var cell = SpreadsheetApp.getCurrentCell(); var text = cell.getRichTextValue().getText() var richtext = SpreadsheetApp.newRichTextValue().setText(text); var steplength = 360 / text.length; for (var pos = 0; pos < text.length; pos++) { var color = hsl2rgb(pos * steplength, 100, 50); var colorCode = '#' + toHex(color.r) + toHex(color.g) + toHex(color.b) var style = SpreadsheetApp.newTextStyle().setForegroundColor(colorCode); richtext.setTextStyle(pos, pos + 1, style.build()); } cell.setRichTextValue(richtext.build()); } function toHex(num) { var str = num.toString(16); if (str.length < 2) { str = "0" + str; } return str; } // http://hsl2rgb.nichabi.com/javascript-function.php function hsl2rgb (h, s, l) { var r, g, b, m, c, x if (!isFinite(h)) h = 0 if (!isFinite(s)) s = 0 if (!isFinite(l)) l = 0 h /= 60 if (h < 0) h = 6 - (-h % 6) h %= 6 s = Math.max(0, Math.min(1, s / 100)) l = Math.max(0, Math.min(1, l / 100)) c = (1 - Math.abs((2 * l) - 1)) * s x = c * (1 - Math.abs((h % 2) - 1)) if (h < 1) { r = c g = x b = 0 } else if (h < 2) { r = x g = c b = 0 } else if (h < 3) { r = 0 g = c b = x } else if (h < 4) { r = 0 g = x b = c } else if (h < 5) { r = x g = 0 b = c } else { r = c g = 0 b = x } m = l - c / 2 r = Math.round((r + m) * 255) g = Math.round((g + m) * 255) b = Math.round((b + m) * 255) return { r: r, g: g, b: b } } |