【问题标题】:Is it possible to change a row color based on time and whether a cell is empty or not?是否可以根据时间以及单元格是否为空来更改行颜色?
【发布时间】:2019-07-06 03:01:54
【问题描述】:

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

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

是否可以使用条件格式或谷歌应用脚​​本,如果在收到响应后(行变为黄色),如果在 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");
    }    
  }
}

【问题讨论】:

  • 欢迎。 如果在 5 分钟内没有数据输入到 H 列... 5 分钟的调整期有多重要/可协商?例如,时间驱动的触发器可能是一个选项,但即使设置为每 5 分钟一次,仍有可能在 9 分钟内无法处理响应。您可以缩短时间段,但根据收到的回复数量,您需要注意任何配额问题。
  • 最好在收到回复5分钟后,H列仍未填写,则该行变为红色。如果 5 分钟过去了,但 H 列已经有数据,则无需再更改为行颜色。这用于提醒某人是否已经填写了 H。
  • 这样的事情可能在没有 Apps 脚本的情况下更简单地完成,只使用条件格式。如果没有记错,Forms 会在数据输入表单时生成时间戳。您可以使用它并添加 5 分钟 (timestamp + 5/24/60),如果 NOW() 大于此 时间戳 + 5 分钟 并且 H 列尚未填充,则将颜色更改为红色的。您唯一的问题是 NOW() 不会自动更新,因此您需要在 File > Spreadsheet settings > Calculation > Recalculation > On change and every minute中更改它i>.
  • 我也想过使用它,但我无法为条件格式提出正确的条件。您对习俗应该是什么有任何想法吗?另外,因为我使用不同的工作表来保持响应的格式,所以单元格似乎不会与 A:I 列上的信息一起移动。
  • This is what I've got. 这里的自定义公式是从 C2:C11:=AND(NOW()&gt;B2,D2="") 应用的。我不确定您所说的“单元格不会与信息一起移动”是什么意思,请您进一步澄清一下吗?

标签: google-apps-script google-sheets


【解决方案1】:

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

对于您的用例,您可以通过使用此公式的辅助列控制限制来做到这一点:

=time_stamp + 5/24/60

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

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

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

并将填充颜色设置为红色。这会将A:G 中满足以下三个条件的所有单元格变为红色:

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

然后您可以像往常一样为黄色、蓝色和绿色添加额外的规则:

  • 黄色:=$time_stamp&lt;&gt;""
  • 蓝色:=$H2&lt;&gt;""
  • 绿色:=$I2&lt;&gt;""

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


正如您在 cmets 中所述,您的设置存在一个令人困惑的问题,即您首先对最新表单提交进行排序的方式。我建议针对该问题提交一个单独的问题,看看是否可以为您的设置制定一些解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2012-02-07
    相关资源
    最近更新 更多