我有一个googlespreadsheet,其中列出了错误列表,每当我修复错误时,我将状态从“未启动”更改为“完成”。我想为Google Docs电子表格编写一个脚本,这样每当我将状态更改为“完成”时,整个行都会以某种颜色突出显示。
我已经知道Google电子表格已经“改变文字颜色”,但该功能只会更改单元格的颜色而不会改变整行的颜色。
答案 0 :(得分:54)
//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;
}
}
}
答案 1 :(得分:40)
意识到这是一个旧线程,但在看到这样的大量脚本后,我注意到你只能使用条件格式化来实现这一点。
假设“状态”是D列:
突出显示细胞&gt;右键单击&gt;条件格式。 选择“自定义公式为”并将公式设置为
=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,因此您将在任何给定行上获得不一致的格式。
答案 2 :(得分:27)
我使用了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") {
// E.g. 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
// (e.g. 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");
}
}
}
}
答案 3 :(得分:6)
user2532030的回答是正确而简单的答案。
我只想补充一点,在这种情况下,确定单元格的值不适合RegEx匹配,我发现以下语法的工作方式相同,只有数值,关系等。 :
[Custom formula is]
=$B$2:$B = "Complete"
Range: A2:Z1000
如果任何行的第2列(脚本中的第2行,但前导$表示,这可能是任何行)在文本上等于&#34;完成&#34;,为整个工作表的范围执行X(不包括标题)行(即从A2而不是A1开始))。
但显然,这种方法也允许进行数值运算(即使这不适用于op的问题),例如:
=$B$2:$B > $C$2:$C
所以,如果任何一行中col B的值高于col C值,那就做吧。
最后一件事: 最有可能的是,这仅适用于我,但我愚蠢到屡次忘记在下拉列表中选择自定义公式,将其留在文本包含。显然,这不会浮动......
答案 4 :(得分:2)
我认为更简单(尽管没有脚本),假设Status
列是ColumnS。
选择ColumnS并从中清除格式。选择要格式化的整个范围和格式,条件格式...,格式化单元格,如果... Custom formula is
和:
=and($S1<>"",search("Complete",$S1)>0)
填写选项并完成。
这不区分大小写(将search
更改为find
)并突出显示ColumnS包含Now complete
(以及Not yet complete
)之类的行。