1

我有一个带有条件背景格式规则的谷歌电子表格。当用户更改单元格时,我还有一个自动排序工作表的功能(它是具有优先级的任务列表)。不幸的是,自动排序可能会以某种方式为单元格设置错误的背景,可以通过选择一列然后单击“背景->重置参数”按钮手动修复。我需要自动对脚本执行相同操作以保持单元格的正确背景。如何强制 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()
  }
}
4

1 回答 1

2

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

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

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

回到你的问题。

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.
于 2014-08-15T12:16:31.350 回答