用另一个单元格的时间戳填充一个单元格,仅当另一个单元格不为空时才编辑

时间:2018-12-18 01:34:42

标签: google-apps-script google-sheets

我需要用另一个单元格版本的时间戳填充google spreedsheet中的一个单元格。但是,只有在使用某些内容编辑另一个单元格而不是擦除该单元格的情况下,才应显示此时间戳。

我已经尝试过使用此代码,但是如果我擦除另一个单元格,也会显示时间戳。

function onEdit(e) 
{
  if ([8].indexOf(e.range.columnStart) != -1) 
  {
    if ([8].indexOf(e.range.columnStart) === '') 
    {
      e.range.offset(0, -7).setValue('0');
    }
    else
     e.range.offset(0, -7).setValue(new Date()).setNumberFormat("yyMMdd HH:mm:ss");
  }      
}

1 个答案:

答案 0 :(得分:0)

function onEdit(e) {
  // Make sure our edit is a single cell in the H column
  // and that our edit has a value
  if(e.range.columnStart === 8 && e.value.length) {
    e.range.offset(0, -7).setValue(new Date()).setNumberFormat("yyMMdd HH:mm:ss");
  } else {
    e.range.offset(0, -7).setValue('0');
  }
}

更新后的条件现在执行3次检查:

  • e.range.columnStart === 8确保我们从H列开始
  • e.value.length确保

    1. 我们的编辑不是空白
    2. 该编辑仅影响单个单元格,因为编辑多个单元格时e.value不可用(请参见:Edit section

[8].indexOf(e.range.columnStart) === ''已删除,因为indexOf无法返回空字符串。它将始终为false,这是所有修改都会更新时间戳的原因。

编辑:Documentation for columnStart,仍在寻找Google的官方来源。 e.range.getHeight() === 1 && e.range.getWidth() === 1 && e.range.getColumn() === 8是经过验证的替代方案。