最大的问题是,从今天开始,当我编辑相邻的单元格时,我要向单元格添加一个日期。到目前为止,一切都很好。但是,当日期更改或相邻单元格被第二次编辑时,它不需要更改。
基本上是尝试检查单元格中是否已经有一个日期,如果有,只需返回即可。但是由于某种原因,它没有正确进行字符串比较。它永远不会将其识别为空字符串。然后我尝试使用include(),它告诉我不能在对象上使用include()。我的理解是getDisplayValue()应该总是返回一个字符串?有点茫然。
function getDate(progress) {
//progress: cell showing progress state (Not started, begun, completed)
var range = SpreadsheetApp.getActiveRange();
var d = range.getDisplayValue();
if(progress == 'Completed') { return 'done'; }
if(d != '') { return; } //if due date cell already has a date, don't change it
today = new Date();
due = new Date();
due.setDate(today.getDate() + 7); //one week from today
return due;
}
您知道此代码有什么问题吗?或者,如果有更优雅的选择,请开放其他解决方案。
答案 0 :(得分:1)
如果我的理解是正确的,那么该修改如何?请认为这只是几个答案之一。
getValue()
来检索值,并使用Object.prototype.toString.call(d).slice(8, -1) == 'Date'
来进行if语句。
getDisplayValue()
returns the string value,即使单元格的值是日期对象也是如此。因此,在这种情况下,我使用getValue()
确认它是否为日期对象。function getDate(progress) {
Utilities.sleep(5000); // <--- Added
//progress: cell showing progress state (Not started, begun, completed)
var range = SpreadsheetApp.getActiveRange();
var d = range.getValue(); // Modified
if(progress == 'Completed') { return 'done'; }
if (d && Object.prototype.toString.call(d).slice(8, -1) == 'Date') { return; } // Modified
today = new Date();
due = new Date();
due.setDate(today.getDate() + 7); //one week from today
return due;
}
getDate
的功能时,如果getValue()
检索的值是日期对象,则Object.prototype.toString.call(d).slice(8, -1) == 'Date'
返回true
。因此,if语句下面的脚本不会运行。如果我误解了您的问题,而这不是您想要的结果,我深表歉意。