强制条件格式应用

时间:2014-08-15 10:59:39

标签: google-sheets gs-conditional-formatting

我有一个带有条件背景格式规则的google spreadseet表。我还有一个功能,当用户更改单元格时它会自动进行分页(它是具有优先级的任务列表)。不幸的是,自动排序可能会以某种方式为单元格设置错误的背景,可以通过选择列然后单击" background-> reset parameters"来手动修复。按钮。我需要自动执行相同的脚本以保持正确的单元格背景。如何强制google-spreadsheet使用条件格式规则重新渲染单元格? 自动排序功能:

function onEdit(event){
  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 1;
  var tableRange = "A2:Z1000";

  if(editedCell.getColumn() == columnToSortBy){   
    var range = sheet.getRange(tableRange);
    range.sort( { column : columnToSortBy, ascending: false } );
    // code below doesn't help to solve the problem:
    //var statusRange = sheet.getRange("B2:B1000");
    //statusRange.clear({formatOnly: true})
    //statusRange.clearFormat();
    //SpreadsheetApp.flush()
  }
}

1 个答案:

答案 0 :(得分:1)

可能发生的是您已将条件格式应用于一系列单元格。

当您的工作表按脚本排序时,部分/所有单元格可能会受到影响,因为正在移动条件格式应用的范围。

我会尽力回答你的问题,但我认为你可能会从错误的角度看问题。鉴于你的表很大,整个页面除了标题行?您可能错误地应用条件格式。如果它作用于整个页面,那么重新排序页面不应该影响它。在格式化范围内添加或删除行时,我遇到过类似的问题。因此,如果您想发布格式规则,我可能会在那里发现一些内容。

回到你的问题。

var range = sheet.getRange(tableRange); is correct.

我认为你不能使用

statusRange.clear({formatOnly: true})
statusRange.clearFormat();

因为.clear和.clearFormat应用于工作表。

除了标题行之外,您的表看起来占据了整个表格吗?如果是,那就试试。

sheet.clearFormat(); 

这将清除您的工作表格式,因此您现在可以使用白色背景颜色。

现在,我不知道如何使用脚本直接设置条件格式规则。我有两个可能的解决方案,我自己用过。

放弃条件格式并使用脚本设置所需的格式。

您可以直接设置各种单元格格式,即背景色之一。 我不知道你想要这样做,你的逻辑,但有几个功能可以用CSS或RGB做到这一点或将范围设置为不同的颜色。

选择单元格或范围后,可以使用

range.setBackground("red");

红色可以用符号代替,例如'#FF0000'。

使用隐藏的条件格式模板。

在标题行之后创建另一行。因此,将表格范围调整为

var tableRange = "A3:Z1000";

现在第2行成为您的模板。在第2行中设置所需的条件格式设置规则并隐藏该行。不要清除格式,而是在页面上复制第2行的格式。

var sheet  = event.source.getActiveSheet();
var source = sheet.getRange(2,1,1,26); // Gets row 2 

source.copyFormatToRange(sheet, 1, 26, 3, 1000);  // will repeat down rows.