我有一个带有条件背景格式规则的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()
}
}
答案 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.