使用带条件格式的 NOW() 计算经过时间
Calculate elapsed time using NOW() with conditional formatting
我正在尝试为当地狗收容所的志愿者设立一个 Google Sheet。我们的想法是拥有一个自动更新的电子表格,以两种方式一目了然地显示哪些狗确实需要遛:
- 根据经过的时间用颜色条件格式化行:
如果他们上次步行已经超过 6 小时,则为红色,
黄色持续 3-6 小时,或
如果他们在 <3 小时前走过,则为绿色。
- 自动对行进行排序,使走得最远的狗始终排在列表的顶部,而当它们散步时,它们会排在列表的底部。
Here's我所在的位置。
问题 1:我正在尝试使用 NOW() 函数(return当前日期和时间)计算经过的时间,减去最后一次步行的时间。问题是,如果您只输入时间,Google 显然会假定日期是 12/30/1899。因此,如果我输入 8:00 am
,并且基于 NOW() 的当前时间是 4:00 pm,而不是 returning 8:00 hours
,它计算的持续时间为 10,000,000+从 1899 年 12 月 30 日 8:00 上午到当前日期和时间已经过去的小时数。 (讨论过类似的问题here)。
如果我将输出单元格保留为 HH:MM 格式,它最初看起来不错,因为它只是 return HH:MM 为 8:00
,但是我不能使用它,因为这样条件格式将不起作用 - 它实际上仍在计算自 1899 年以来的 10,000,000 小时。所以我无法为 red/green/yellow 设置持续时间值,因为所有输出值都会缓慢增加每天我们都离 1899 越来越远,这意味着我必须每天重新设置范围。
显然,我可以通过始终包括时间 和 日期来解决这个问题,但我的想法是拥有一个防白痴的电子表格,以便任何志愿者都可以使用它只是加上他们遛狗的时间。如果他们也必须输入日期,那将不起作用。
问题 2:假设我可以让上面的工作正常,我如何设置它以便 table 在任何更改后自动排序(即当一个dog walked and the entry gets updated)?
帮忙?
请尝试:
问题 1
绿色很简单,只需使用标准填充方式格式化所有数据(CF 将在适用的情况下覆盖它)。
Select A1 并应用 自定义公式是 of:
=and($D1<>"",timevalue(now())>$D1+6/24)
红色和范围 A:E
重复(这两个的顺序很重要):
=and($D1<>"",timevalue(now())>$D1+3/24)
颜色为黄色,范围为 A:E。
保存规则并关闭 window。
问题 2
通过选择 ColumnA:E 创建一个 pivot table(可能必须首先删除 sheet 中低端的一些内容)和 Data > Pivot Table 报告...,向 Rows 添加字段 Dog name
(不显示总计),向 Values 添加字段 Time since last walk
和总结 by:SUM。将 sheet PT 命名为
在你的另一个 sheet(不是 PT)的 J2 中输入:
=query(PT!A:B, "Select * order by B desc ")
可能值得注意的是,如果没有白天部分,可能会出现时间跨度午夜的问题 - 如果您有失眠的步行者?!
对于自动排序,我在 Whosebug 的其他地方找到了一个脚本,并根据我的目的对其稍作修改:
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 } );
}
}
}
我正在尝试为当地狗收容所的志愿者设立一个 Google Sheet。我们的想法是拥有一个自动更新的电子表格,以两种方式一目了然地显示哪些狗确实需要遛:
- 根据经过的时间用颜色条件格式化行:
如果他们上次步行已经超过 6 小时,则为红色,
黄色持续 3-6 小时,或
如果他们在 <3 小时前走过,则为绿色。 - 自动对行进行排序,使走得最远的狗始终排在列表的顶部,而当它们散步时,它们会排在列表的底部。
Here's我所在的位置。
问题 1:我正在尝试使用 NOW() 函数(return当前日期和时间)计算经过的时间,减去最后一次步行的时间。问题是,如果您只输入时间,Google 显然会假定日期是 12/30/1899。因此,如果我输入 8:00 am
,并且基于 NOW() 的当前时间是 4:00 pm,而不是 returning 8:00 hours
,它计算的持续时间为 10,000,000+从 1899 年 12 月 30 日 8:00 上午到当前日期和时间已经过去的小时数。 (讨论过类似的问题here)。
如果我将输出单元格保留为 HH:MM 格式,它最初看起来不错,因为它只是 return HH:MM 为 8:00
,但是我不能使用它,因为这样条件格式将不起作用 - 它实际上仍在计算自 1899 年以来的 10,000,000 小时。所以我无法为 red/green/yellow 设置持续时间值,因为所有输出值都会缓慢增加每天我们都离 1899 越来越远,这意味着我必须每天重新设置范围。
显然,我可以通过始终包括时间 和 日期来解决这个问题,但我的想法是拥有一个防白痴的电子表格,以便任何志愿者都可以使用它只是加上他们遛狗的时间。如果他们也必须输入日期,那将不起作用。
问题 2:假设我可以让上面的工作正常,我如何设置它以便 table 在任何更改后自动排序(即当一个dog walked and the entry gets updated)?
帮忙?
请尝试:
问题 1
绿色很简单,只需使用标准填充方式格式化所有数据(CF 将在适用的情况下覆盖它)。
Select A1 并应用 自定义公式是 of:
=and($D1<>"",timevalue(now())>$D1+6/24)
红色和范围 A:E
重复(这两个的顺序很重要):
=and($D1<>"",timevalue(now())>$D1+3/24)
颜色为黄色,范围为 A:E。
保存规则并关闭 window。
问题 2
通过选择 ColumnA:E 创建一个 pivot table(可能必须首先删除 sheet 中低端的一些内容)和 Data > Pivot Table 报告...,向 Rows 添加字段 Dog name
(不显示总计),向 Values 添加字段 Time since last walk
和总结 by:SUM。将 sheet PT 命名为
在你的另一个 sheet(不是 PT)的 J2 中输入:
=query(PT!A:B, "Select * order by B desc ")
可能值得注意的是,如果没有白天部分,可能会出现时间跨度午夜的问题 - 如果您有失眠的步行者?!
对于自动排序,我在 Whosebug 的其他地方找到了一个脚本,并根据我的目的对其稍作修改:
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 } );
}
}
}