使用条件格式的NOW()计算经过的时间

时间:2015-01-02 03:49:32

标签: google-sheets gs-conditional-formatting

我正试图在当地的狗庇护所为志愿者设置Google表格。我们的想法是拥有一个自动更新的电子表格,以两种方式一目了然地显示哪些狗真的需要走路:

  • 根据已用时间条件格式化带颜色的行:
    如果自上次散步以来已经过了6个小时,则为红色 黄色3-6小时,或
    绿色,如果他们走了<3小时前。
  • 自动排序行,以便最长的狗总是在列表的顶部,当他们走路时,他们会到列表的底部。

Here's我在哪里。

问题1 :我试图通过使用NOW()函数(返回当前日期和时间)减去上次行走的时间来计算经过的时间。问题是如果你只输入一个时间,谷歌显然假设日期是12/30/1899。因此,如果我输入8:00 am,并且基于NOW()的当前时间是下午4:00,而不是返回8:00 hours,则计算自8以来经过的10,000,000小时的持续时间: 1899年12月30日上午00点至当前日期和时间。 (类似的问题讨论了here)。

如果我将输出单元保持为HH:MM格式,它最初看起来没问题,因为它只会将HH:MM返回为8:00,但我可以&#39;使用它,因为条件格式不会起作用 - 它实际上仍在计算自1899年以来的10,000,000小时。所以我不能设置红色/绿色/黄色的持续时间值,因为所有输出值我们每天都会从1899年开始慢慢增加,这意味着我必须每天重新调整范围。

显然,我可以通过总是包含时间日期来解决这个问题,但我们的想法是拥有一个防止白痴的电子表格,这样任何志愿者都可以通过添加他们的时间来使用它走了狗。如果他们也必须输入日期,它就不会工作。

问题2 :假设我能够完成上述工作,我该如何设置它以便表格在任何更改后自动排序(即当狗走路并且条目得到更新时) ?

帮助?

2 个答案:

答案 0 :(得分:1)

请尝试:

问题1

绿色很简单,只需使用标准填充格式化所有数据(CF会在适用的情况下覆盖它)。

选择A1并应用自定义公式

=and($D1<>"",timevalue(now())>$D1+6/24)

红色和范围A:E

重复(这两个的顺序很重要):

=and($D1<>"",timevalue(now())>$D1+3/24)  

颜色为黄色,范围为A:E。

保存规则并关闭窗口。

问题2

通过选择ColumnA:E创建一个数据透视表(可能必须首先删除工作表中低位的某些内容)和数据&gt;数据透视表报告...,添加字段Dog name(不显示总计),添加字段Time since last walk并汇总:和。将表格命名为PT。

在您的其他工作表(不是PT)的J2中输入:

=query(PT!A:B, "Select * order by B desc ")  

SO27737159 example

值得注意的是,如果没有白天的部分可能会出现问题,如果你有失眠的步行者,那么这些问题可能会出现问题吗?

答案 1 :(得分:0)

对于autosorting,我在stackoverflow上的其他地方找到了一个脚本,并为了我的目的稍微修改了它:

function onEdit(event){

  var sheet = SpreadsheetApp.getActiveSheet();
  if(sheet.getName()=='Sheet1'){
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 4;
  var tableRange = "a2:f91";

  if(editedCell.getColumn() == columnToSortBy){   
    var range = sheet.getRange(tableRange);
    range.sort( { column : columnToSortBy, ascending: true } );
  }
}
}