google-apps-script - 应用脚本 - 例外:您无权调用 setFontColor
问题描述
我正在尝试根据同一行上的其他单元格字体编辑单元格字体,但我无法使用我看到的自定义函数编辑它们的样式。
我的问题是如何实现这一点?
这是我的代码:
function colorCells(nameRange, valueRange) {
var redHex = "#ff0000";
var orangeHex = "#ff6d01";
var activeRange = SpreadsheetApp.getActiveRange();
var activeSheet = activeRange.getSheet();
var range = activeSheet.getRange(valueRange);
var rangeColor = range.getFontColors();
console.log(rangeColor);
var newColors = rangeColor.map(r => r.includes(redHex) ? redHex : r.includes(orangeHex) ? orangeHex : '#000000');
console.log(newColors);
var rangeToColor = activeSheet.getRange(nameRange)
for (let i = 1; i <= rangeToColor.getNumRows(); i++) {
const cell = rangeToColor.getCell(i, 1);
cell.setFontColor(newColors[i-1])
}
return "";
}
编辑 :
为了解释我的目标,我有一列字符串和每一行数据。而且我希望某些数据根据条件格式具有不同的字体颜色。
所以我希望如果一行中的任何数据是红色或橙色,则相关的列字符串将其颜色更改为相同的颜色。这是图像上的示例。
在应用函数/脚本之前:
后 :
解决方案
您真正想要的是提取每一行的颜色,然后将其应用于具有名称的列(独立于那里的任何名称)。
为此,最简单的方法是制作一个提取该信息的函数:
const BLACK = '#000000'
function extractColumnColors(range) {
return range.getFontColors()
.map(rowColors => [
rowColors.find(v => v !== BLACK) ?? BLACK
])
}
此函数执行以下操作:
- 获取范围内单元格的字体颜色(类
Range
不是它的 A1 表示法)。 - 对于每一行,找到第一个不是黑色的颜色,并用它创建一个包含单个元素的数组。
- 如果全部为黑色,则数组中的值为黑色。
有了所有这些,结果是一个包含具有单个颜色值的数组的数组,这是完美的,因为它允许setFontColors
直接调用:
function example() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Example')
const nameRange = sheet.getRange('A1:A')
const valuesRange = sheet.getRange('B1:C')
const newColors = extractColumnColors(valuesRange)
nameRange.setFontColors(newColors)
}
参考
推荐阅读
- c++ - 为什么我得到“未定义的引用”到我_知道_已定义的静态数据成员
- python - Numpy数组如何获取行最小值的索引
- angular - 带有香蕉盒语法的角度双向数据绑定不起作用
- docker - Postgresql 容器未在 docker-compose 文件中运行 - 为什么会这样?
- java - 比较器和优先队列
- postgresql - 在没有 CROSS JOIN 的情况下计算 Postgres 11.7 中每一行的平均计数
- visual-studio - 问题:“nvcc 致命:无法为 Microsoft Visual Studio 设置环境”
- java - 如何从 Hybris 枚举类型转换为 Java 日历?
- c# - 如何通过 Visual Studio 为 ASP.Net Web 应用程序(C#)启用 LARGEADDRESSAWARE
- python - 您好,我有一个文本文件,我想使用 python 以 UTF-16 unicode 编写