如果编辑的单元格为空,如何清空相邻单元格?

时间:2016-04-26 15:59:50

标签: google-apps-script google-sheets

我的应用脚本代码在编辑单元格时基于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"))
    }

1 个答案:

答案 0 :(得分:0)

这是编辑event object的未记录行为,我认为这是一个错误。对于用户清除单元格,它对于可安装的编辑触发器和简单的onEdit触发器的行为不同。

  1. 可安装触发器:e.oldValue具有旧值,e.value未定义(事件对象没有value属性)。
  2. 简单触发器:e.oldValue具有旧值,e.value 保留对象 {"oldValue":"whatever it was"}
  3. 这就是为什么带有!e.value的条件语句在两种情况下表现不同的原因:undefined是假的,但是一个对象是真的。