根据一个单元格中的更改修改Google电子表格中的时间戳

时间:2017-10-28 15:19:27

标签: google-apps-script google-sheets timestamp

我一直在尝试修改在Google工作表中修改特定单元格时的时间戳。我的最终目标是,如果将单元格编辑为某个值,则修改后的时间戳会反映,如果完全删除了单元格的内容,则时间戳也会删除。我当前的脚本如下所示:

function onEdit()
{
  var s = SpreadsheetApp.getActiveSheet();
  if( s.getName() == "Sheet1" ) {
    var r = s.getActiveCell();
    if( r.getColumn() == 4 ) {
      var nextCell = r.offset(0,1);
      if((nextCell.getValue() == "" && r.value != "")  ||  (nextCell.getValue() != "" && r.value != "")) {
        nextCell.setValue(new Date());
      } else if(nextCell.getValue() != "" && r.value == "") { 
        nextCell.setValue("");
      }
    }
  }
}

现在,如果对单元格进行任何修改,此代码可以将时间戳更改为当前,但如果我完全删除单元格的内容,则时间戳不会删除,它会再次更改为当前时间戳。

1 个答案:

答案 0 :(得分:0)

试试这个:

function onEdit()
{
  var s = SpreadsheetApp.getActiveSheet();
  if( s.getName() == "Sheet1" ) 
  {
    var r = s.getActiveCell();
    var rvalue=r.getValue();
    if( r.getColumn() == 4 ) 
    {
      var nextCell = r.offset(0,1);
      if(rvalue != "")) 
      {
        nextCell.setValue(new Date());
      } 
      else
      { 
        nextCell.setValue("");
      }
    }
  }
}

你也可以这样做:

function onEdit(e)
{
  if(e.source.getActiveSheet().getName()=="Sheet1") 
  {
    if(e.range.getColumn()==4) 
    {
      var nextCell = e.range.offset(0,1);
      if(e.value!="")) 
      {
        nextCell.setValue(new Date());
      } 
      else
      { 
        nextCell.setValue("");
      }
    }
  }
}

虽然后者调试起来有点困难。

  

注意:项目代码中只能有一个onEdit()。如果你有其他人,那么他们都需要与适当的条件逻辑合并为一个,以防止他们不恰当地互动。