首页 > 解决方案 > 使用脚本编辑器将条件格式应用于多列

问题描述

我正在创建一个 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);
  }
}

下面是我试图让编辑器处理的电子表格的屏幕截图,以供参考我想要完成的工作。 请参阅下面的链接。

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-apispreadsheet

解决方案


如何在新范围内扩展条件格式

步骤如下:

  • 检索感兴趣的工作表
  • 检索此工作表的条件规则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);
  }
}

参考


推荐阅读