【问题标题】:Apply Conditional Format to Multiple Columns with Script Editor使用脚本编辑器将条件格式应用于多列
【发布时间】:2020-06-02 14:10:30
【问题描述】:

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

下面是我试图让编辑器工作的电子表格的屏幕截图,以供参考我想要完成的工作。 See Link below.

【问题讨论】:

  • 定义adjacent。您是指同一行中的所有单元格吗?
  • 是的,我就是这个意思。

标签: google-apps-script google-sheets google-sheets-api spreadsheet


【解决方案1】:

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

步骤如下:

  • 检索感兴趣的工作表
  • 使用getConditionalFormatRules() 检索此工作表的条件规则
  • 遍历所有规则
  • 使用getRanges() 检索每个规则的ranges
  • 遍历范围以验证您感兴趣的列是范围之一
  • 如果发现该规则适用于您感兴趣的列 (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);
  }
}

参考文献

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-03
    • 2020-03-07
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多