Google Spreadsheet:脚本在单元格更改文本时更改行颜色;

我有一个googlespreadsheet,在那里我保存一个错误列表,每当我修复一个错误,我将状态从“未开始”更改为“完成”。 我想为Google文档电子表格编写脚本,只要将状态更改为“完成”,整行就会以某种颜色突出显示。

我已经知道Google Spreadsheet已经有了“改变文本颜色”的function,但是这个function只改变了单元格的颜色,并没有改变整行的颜色。

//Sets the row color depending on the value in the "Status" column. function setRowColors() { var range = SpreadsheetApp.getActiveSheet().getDataRange(); var statusColumnOffset = getStatusColumnOffset(); for (var i = range.getRow(); i < range.getLastRow(); i++) { rowRange = range.offset(i, 0, 1); status = rowRange.offset(0, statusColumnOffset).getValue(); if (status == 'Completed') { rowRange.setBackgroundColor("#99CC99"); } else if (status == 'In Progress') { rowRange.setBackgroundColor("#FFDD88"); } else if (status == 'Not Started') { rowRange.setBackgroundColor("#CC6666"); } } } //Returns the offset value of the column titled "Status" //(eg, if the 7th column is labeled "Status", this function returns 6) function getStatusColumnOffset() { lastColumn = SpreadsheetApp.getActiveSheet().getLastColumn(); var range = SpreadsheetApp.getActiveSheet().getRange(1,1,1,lastColumn); for (var i = 0; i < range.getLastColumn(); i++) { if (range.offset(0, i, 1, 1).getValue() == "Status") { return i; } } } 

意识到这是一个古老的线程,但看到这样的脚本很多后,我注意到,你可以做到这一点只是使用条件格式。

假设“状态”是D列:

突出显示单元格>右键单击>条件格式。 select“自定义公式是”并将公式设置为

=RegExMatch($D2,"Complete")

要么

=OR(RegExMatch($D2,"Complete"),RegExMatch($D2,"complete"))

编辑(感谢FrederikSchøning)

=RegExMatch($D2,"(?i)Complete")然后设置范围覆盖所有行,例如A2:Z10 。 这是不区分大小写的,所以会匹配complete,Complete或者CoMpLeTe。

然后,您可以添加其他规则“未开始”等。$是非常重要的。 它表示一个绝对的参考。 没有它,单元格A2会看D2,但B2会看E2,所以你会得到不一致的格式在任何给定的行。

我使用了GENEGC的脚本,但是我发现它很慢。

它很慢,因为它会在每次编辑时扫描整个表格。

所以我为自己写了一个更快,更干净的方法,我想分享一下。

 function onEdit(e) { if (e) { var ss = e.source.getActiveSheet(); var r = e.source.getActiveRange(); // If you want to be specific // do not work in first row // do not work in other sheets except "MySheet" if (r.getRow() != 1 && ss.getName() == "MySheet") { // Eg status column is 2nd (B) status = ss.getRange(r.getRow(), 2).getValue(); // Specify the range with which You want to highlight // with some reading of API you can easily modify the range selection properties // (eg to automatically select all columns) rowRange = ss.getRange(r.getRow(),1,1,19); // This changes font color if (status == 'YES') { rowRange.setFontColor("#999999"); } else if (status == 'N/A') { rowRange.setFontColor("#999999"); // DEFAULT } else if (status == '') { rowRange.setFontColor("#000000"); } } } } 

user2532030的答案是正确和最简单的答案。

我只是想补充说,在这种情况下,确定单元格的值不适合RegEx匹配,我发现下面的语法工作相同,只有数值,关系et.c .:

 [Custom formula is] =$B$2:$B = "Complete" Range: A2:Z1000 

如果任何行的第2列(脚本中的第2行,但是前面的$表示,可以是任何行),文本等于“完整”,则对整个表格的范围进行X(不包括标题行(即从A2开始而不是从A1))。

但显然,这种方法也允许数字操作(尽pipe这不适用于op的问题),如:

 =$B$2:$B > $C$2:$C 

因此,如果任何一行中列B的值高于列C的值,那么做一些事情。

最后一件事:最有可能的是,这只适用于我,但我很笨,一再忘记select自定义公式是在下拉列表中,留在文本包含 。 显然,这不会浮动…

我认为简单(尽pipe没有脚本),假设Status栏是ColumnS。

select列并从中清除格式。 select要格式化的整个范围和格式,条件格式…,格式化单元格如果… Custom formula is和:

 =and($S1<>"",search("Complete",$S1)>0) 

与填充的select和完成

这不区分大小写(更改searchfind ),并将突出显示一个行,其中ColumnS包含“ Now complete (尽pipeNot yet complete )之类的行。