是否可以根据时间以及单元格是否为空来更改行颜色?

时间:2019-07-06 03:01:54

标签: google-apps-script google-sheets

我有一个包含2张纸的电子表格(Sheet1和Sheet2)。 Sheet1连接到表单以接收响应,而Sheet2只是使用ImportRange函数进行排序和格式化的Sheet1信息的副本。表单响应仅使用A:G列,而H和I列将在稍后填充。

在收到响应后,响应所在行的颜色将变为黄色。填充H列后,行颜色将更改为蓝色,填充I后,行颜色将变为绿色。

是否可以使用条件格式设置或Google App Script,如果在收到响应后(行变成黄色),如果在5分钟内没有数据输入到H列,则A:G列的行将变为“红色”,并且仅在填写H后变为“蓝色”?

到目前为止,我仅在使用Custom Formula is... =$G2<>""条件的情况下尝试使用条件格式。

除此以外,有人建议在App Script上使用以下代码(使用Unixtime之间的差异),但我无法使其正常工作(10分钟后它不会变成“红色”,而是一直保持黄色) :

function myFunction() {  
  ss = SpreadsheetApp.getActiveSpreadsheet().getDataRange();

  var unixStart = new Date(1970, 1, 1, 0, 0, 0);  
  var nowDate = ss.getCell(2, 13).getValue() - (unixStart * 86400);
  var rows = ss.getLastRow();

  for (var i = 2; i <= rows; i++){
   var checkTime = ss.getCell(i, 7).getValue() - (unixStart * 86400);    
    if (nowDate - checkTime < 600000){
      SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getRange(i, 1, 1, 7).setBackground("yellow");
    }    
  }
}

1 个答案:

答案 0 :(得分:1)

您可以根据时间为单元格着色,而不必使用Apps脚本,这使您的文件更简单。

对于您的用例,您可以通过使用带有以下公式的帮助器列控制限制来做到这一点:

=time_stamp + 5/24/60

其中time_stamp是Forms产生的时间戳。自动提交表单的时间将增加5分钟。

然后,您可以使用以下公式将此新列用作条件A:G范围内单元格的格式之一:

=AND(NOW()>time_stamp_plus_5, $H2="", $I2="")

,然后将填充颜色设置为红色。这会将A:G中满足以下3个条件的所有单元格更改为红色:

  1. NOW()确定的当前时间是在表单提交后的5分钟之后。
  2. H列为空。
  3. 第一列为空。

然后,您可以像往常一样为黄色,蓝色和绿色添加其他规则:

  • 黄色:=$time_stamp<>""
  • 蓝色:=$H2<>""
  • 绿色:=$I2<>""

唯一的麻烦是,默认情况下,NOW()仅在对表单进行更改时才重新计算。您可以转到“文件”>“电子表格设置”>“计算”>“重新计算” ,让它每分钟自动重新计算一次,并将其设置为“每分钟更改一次”。这样可以确保NOW()始终每分钟更新一次。


正如您在评论中指出的那样,您的设置存在一个令人困惑的问题,即您首先对最新表单提交进行排序的方式。我建议为此问题提交一个单独的问题,以查看是否可以针对您的设置进行一些变通。

相关问题