我有一个包含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");
}
}
}
答案 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个条件的所有单元格更改为红色:
NOW()
确定的当前时间是在表单提交后的5分钟之后。然后,您可以像往常一样为黄色,蓝色和绿色添加其他规则:
=$time_stamp<>""
=$H2<>""
=$I2<>""
唯一的麻烦是,默认情况下,NOW()
仅在对表单进行更改时才重新计算。您可以转到“文件”>“电子表格设置”>“计算”>“重新计算” ,让它每分钟自动重新计算一次,并将其设置为“每分钟更改一次”。这样可以确保NOW()
始终每分钟更新一次。
正如您在评论中指出的那样,您的设置存在一个令人困惑的问题,即您首先对最新表单提交进行排序的方式。我建议为此问题提交一个单独的问题,以查看是否可以针对您的设置进行一些变通。