我有一个Google电子表格,其中保留一个错误列表,每当我修复错误时,我都会将状态从“未开始”更改为“完成”。我想为Google Docs电子表格编写一个脚本,以便每当我将状态更改为“完成”整个行时,请以某种颜色突出显示。

我已经知道Google电子表格已经具有“更改文本上的颜色”,但是该功能只会更改单元格的颜色,并且不会更改整个行的颜色。

有帮助吗?

解决方案

//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列:

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

=RegExMatch($D2,"Complete")

或者

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

编辑(感谢FrederikSchøning)

=RegExMatch($D2,"(?i)Complete") 然后设置范围以覆盖所有行 A2:Z10. 。这是不敏感的情况,因此将匹配,完整或完整。

然后,您可以为“未开始”等添加其他规则。$非常重要。它表示绝对参考。没有IT IT单元格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") {

            // 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");
            }   
        }
    }
}

User2532030的答案是正确且最简单的答案。

我只想补充说,在确定单元格的值不适合正则匹配的情况下,我发现以下语法可以工作相同,仅具有数值值,关系et.c。::::::::::::::::

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

如果任何行的第2列(脚本中的第2行,但领先的$表示,这可能是任何行)在文本上等同于“完成”,请对整个表的范围进行x(不包括标头行(即从A2开始,而不是A1))。

但是显然,此方法还允许进行数值操作(即使这不适用于OP的问题),例如:

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

因此,请执行此操作,如果任何行中Col B的值高于Col C值。

最后一件事: 最有可能仅适用于我,但我足够愚蠢,可以反复忘记选择 自定义公式是 在下拉栏中,将其留在 文字包含. 。显然,这不会漂浮...

我认为更简单(尽管没有脚本)假设 Status 列是列。

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

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

有选择的填充 完毕.

这不是案例敏感的(更改 searchfind 为此),并将突出显示列包含的行 Now complete (虽然也是 Not yet complete).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top