如何加速繁重的条件格式规则

How to speed up heavy conditional formatting rules

在我们的营销 company/agency 中,我们在 Google 表格中使用主跟踪器来跟踪我们为客户处理的所有付费广告活动。文档变得越来越长,我们正在使用的各种条件格式规则在对文档进行任何更改时变得越来越繁重和缓慢。

五名员工在任何给定时间都在使用该文档,在对活动进行任何更改时对 "STATUS" 列进行更改——是否准备好上传、是否处于实时状态、是否已暂停等. 条件格式只是根据 "STATUS" 列中的值更改每行的颜色。它还会查看 start/end 日期,并在出现问题时将该行标记为红色。等等

如何使用此文档加快处理速度? I have created a minified version of our tracker with one line for each conditional formatting rule to make it easy for you to have a look.

我相信有更聪明的方法来整合规则and/or构建一个可以更轻松、更高效地处理任务的脚本。

此答案使用脚本在状态更改时更改行的背景颜色(适用于 "READY"、"LIVE" 和 "DONE")。

现场演示: https://docs.google.com/spreadsheets/d/1bVwM1wSBVlZTmz5S95RXSrRQxlTKWWN_Hl4PZ81sbGI/edit?usp=sharing

脚本可在 "Tools - Script Editor..." 菜单下查看。它由 "onEdit" 触发器激活(参见 Is it possible to automate Google Spreadsheets Scripts (e.g. without an event to trigger them)?)。

这是脚本本身:

function onEdit(e) {

  var STATUS_COL = 18;
  var MAX_COLS = 18;

  var COLOR_READY = "grey";
  var COLOR_LIVE = "#512da8";
  var COLOR_DONE = "green";

  var activeSheet = SpreadsheetApp.getActiveSheet();
  var cell = activeSheet.getActiveSelection();
  var val = cell.getValues()[0][0];
  var color = null;

  switch (val) {
    case "READY":
      color = COLOR_READY;
      break;
    case "LIVE":
      color = COLOR_LIVE;
      break;
    case "DONE":
      color = COLOR_DONE;
      break;
  }

  if (color != null) {
     var row = activeSheet.getRange(cell.getRow(), 1, 1, MAX_COLS);
     row.setBackgroundColor(color);
  }

}

我让整行根据某些条件改变颜色。因此,我将条件格式面板中的复杂公式提取到 sheet 上的列中(我得到了 "TRUE" 或 "FALSE"),并在条件格式规则中引用了这些列。由于某些原因,条件格式公式的计算比单元格内的相同计算慢得多。