google-apps-script - 使用脚本编辑器将条件格式应用于多列
问题描述
我正在创建一个 onEdit(e) 函数来根据 A 列的值更新我的图表格式。我已将 A 列设置为使用条件格式和数据验证下拉菜单进行适当的格式设置,但是如何使与更新单元格相邻的其他列具有相同的格式?
请参见下面的代码:
function onEdit(e) {
// Get current active sheet
var actSh = SpreadsheetApp.getActiveSpreadsheet();
// Get the integer value of the location the change is made at
var row = e.range.getRow();
var col = e.range.getColumn();
// Define the max range in columns
var max = actSh.getLastColumn();
// Set a range to apply the conditional rule to
var range = actSh.getRange(row,(col+1),1,(max-1));
if (col == 1) {
// Get Rule for Column A
var rule = e.newConditionalFormatRules().copy();
var newRule = range.setConditionalFormatRules(rule);
}
}
下面是我试图让编辑器处理的电子表格的屏幕截图,以供参考我想要完成的工作。 请参阅下面的链接。
解决方案
如何在新范围内扩展条件格式
步骤如下:
- 检索感兴趣的工作表
- 检索此工作表的条件规则
getConditionalFormatRules()
- 循环遍历所有规则
- 检索
ranges
每个规则getRanges()
- 遍历范围以验证您感兴趣的列是范围之一
- 如果发现该规则适用于您感兴趣的列 (
if(ranges[j].getColumn() == 1)
) - 使用以下命令制作相应规则的副本copy()
- 为新复制的规则分配一个感兴趣的范围,
setRanges([range])
并完成请求build
- 将新规则添加到已经存在的规则数组中
push()
- 退出所有循环后,使用新的规则集更新您的工作表
setConditionalFormatRules(rules)
样本
function onEdit(e) {
// Get current active sheet
var actSh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// Get the integer value of the location the change is made at
var row = e.range.getRow();
var col = e.range.getColumn();
// Define the max range in columns
var max = actSh.getLastColumn();
// Set a range to apply the conditional rule to
var range = actSh.getRange(row,(col+1),1,(max-1));
if (col == 1) {
var rules = actSh.getConditionalFormatRules();
for (var i = 0; i < rules.length; i++){
var ranges = rules[i].getRanges();
for (var j = 0; j < ranges.length; j++){
if (ranges[j].getColumn() == 1){
var rule = rules[i].copy();
rule.setRanges([range]).build();
rules.push(rule);
break;
}
}
}
actSh.setConditionalFormatRules(rules);
}
}
参考
推荐阅读
- python - RecursionError:Python 类中的最大递归深度超出错误
- java - 如何从 ExoPlayer 中的 HLS 流中提取定时 ID3 元数据?
- python - 来自标签(xpath 或 css)的 Selenium find_elements_
- linux - Docker 服务在 LXC 中启动但无法执行命令
- sql - 年初至今的销售数据
- python-3.6 - QApplication 实例/qtbot 夹具导致 travis-ci 中止和核心转储
- python - 训练 spacy 进行文本分类
- unity3d - 方向盘控制器 3D
- c++ - 如何防止 Windows 显示“调试错误!中止()已被调用”对话框?
- node.js - 如果我们将额外/不必要的键值对传递给 API 有效负载,API 验证的行为应该是什么?