我有一个人们填写的表单,这是一个google电子表格。发生这种情况时,我试图根据其中一列中的日期自动更改表单中新行的颜色。我发现了与此类似的问题,并且我能够从这些问题中生成此代码,但是当代码运行时,它不会更改背景颜色。我做错了什么?
function onEdit(e) {
if (e) {
var ss = e.source.getActiveSheet();
var r = e.source.getActiveRange();
if (ss.getName() == "Form Responses Sorted") {
// E.g. date column is 5th (E)
date = ss.getRange(r.getRow(),5).getValue();
rowRange = ss.getRange(r.getRow(),1,1,20);
// This changes background color
if (date == '8/5/2013') {
rowRange.setBackgroundColor("#D00000");
} else if (date == '8/12/2013') {
rowRange.setBackgroundColor("#A0A0A0");
} else if (date == '9/9/2013') {
rowRange.setBackgroundColor("#00FF00");
} else if (date == '9/23/2013') {
rowRange.setFontColor("#33FFCC");
} else if (date == '9/30/2013') {
rowRange.setFontColor("#CCFF33");
} else if (date == '10/7/2013') {
rowRange.setFontColor("#FF6699");
} else if (date == '10/21/2013') {
rowRange.setFontColor("#CC66CC");
} else if (date == '11/4/2013') {
rowRange.setFontColor("#6666FF");
} else if (date == '11/25/2013') {
rowRange.setFontColor("#9933FF");
} else if (date == '12/9/2013') {
rowRange.setFontColor("#FF9933");
} else if (date == '12/16/2013') {
rowRange.setFontColor("#FFFFFF");
} else if (date == '1/13/2014') {
rowRange.setFontColor("#CC9933");
}
}
}
}
答案 0 :(得分:1)
您最有可能在比较中处理不一致的数据类型。我们来看看:
if (date == '8/5/2013')
Google表格中的默认行为是将电子表格中的单元格值“8/5/2013”转换为日期。因此,当您getValue()
时,您将在此比较的左侧有一个javascript日期对象实例。
右侧怎么样?它是一个字符串,是javascript中的原始类型。要比较这两种类型,其中一种将强制,以便我们可以比较它们。由于右边是基本类型,左边将被转换为匹配;一个字符串。让我们看看会是什么。
var A = String(date); // Mon Aug 05 2013 00:00:00 GMT-0400 (EDT)
所以,现在你有一个字符串比较,它返回false
因为:
'Mon Aug 05 2013 00:00:00 GMT-0400 (EDT)' !== '8/5/2013'
解决方案是确保我们比较Date对象。即使这很棘手 - 如果你感兴趣,还有很多背景讨论要阅读,从Compare two dates with JavaScript开始(包括所有笔记!)。 This Blog清楚地涵盖了强制主题,但没有关于日期的详细信息。
上面的代码行可以替换为this,这将正确评估true
。您可以采用之前链接的答案中的一个函数,这些函数更具可读性。
if (date - new Date('8/5/2013') == 0) {
泡沫,冲洗,重复......