【发布时间】: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()>B2,D2="")应用的。我不确定您所说的“单元格不会与信息一起移动”是什么意思,请您进一步澄清一下吗?
标签: google-apps-script google-sheets