我的应用脚本代码在编辑单元格时基于watchCols为相邻单元格添加时间戳。
我需要做的是在用户删除值时删除时间戳。例如。如果他们完成任务列表中的一个,他们会在第2列中放置一个X,但是如果他们删除X意味着他们没有完成任务,那么旁边就不应该有时间戳。
function onEdit(e)
{
var s = e.source.getActiveSheet(),
watchCols = [2, 5, 8, 11, 14, 17],
offsetCol = [1, 1, 1, 1, 1, 1],
ind = watchCols.indexOf(e.range.columnStart);
if (s.getName() !== "Sheet1" || ind === -1) return;
e.range.offset(0, offsetCol[ind])
.setValue(!e.value ? null : Utilities.formatDate(new Date(), "GMT-4", "YYYY-MMM-dd hh:m:s a"))
}
这是我做的最后一次尝试似乎不起作用:
if(ISBLANK(e.range.columnStart) && ISBLANK(e.range.rowStart)) {
e.range.offset(0, offsetCol[ind]).setValue("");
} else {
e.range.offset(0, offsetCol[ind]).setValue(!e.value ? null : Utilities.formatDate(new Date(), "GMT-4", "YYYY-MMM-dd hh:m:s a"))
}
答案 0 :(得分:0)
这是编辑event object的未记录行为,我认为这是一个错误。对于用户清除单元格,它对于可安装的编辑触发器和简单的onEdit触发器的行为不同。
e.oldValue
具有旧值,e.value
未定义(事件对象没有value
属性)。e.oldValue
具有旧值,e.value
保留对象 {"oldValue":"whatever it was"}
这就是为什么带有!e.value
的条件语句在两种情况下表现不同的原因:undefined是假的,但是一个对象是真的。