【问题标题】:Modify timestamp in google spreadsheet on the basis of changes in one cell根据一个单元格的变化修改谷歌电子表格中的时间戳
【发布时间】:2018-04-10 00:24:50
【问题描述】:

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

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("");
      }
    }
  }
}

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

【问题讨论】:

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


    【解决方案1】:

    试试这个:

    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()。如果您还有其他人,那么它们都需要使用适当的条件逻辑组合成一个,以防止它们进行不适当的交互。

    【讨论】:

    • 感谢库珀。您的程序完美运行。还有一种方法可以记录时间戳的变化吗?我正在尝试捕获任务的两个状态之间的持续时间。更详细地说,任务的多个状态将记录在一个单元格中。一旦有人通过从下拉菜单中选择更改状态,时间戳就会被修改。我想记录这些时间戳之间的持续时间。附言我尝试支持您的回答,但由于我是新来的,因此我的声誉低于 1 并且我的投票不会公开显示。
    • 您可以存储时间戳以及您已经知道列号的行号。然后将该信息存储在文件或另一个电子表格中,然后您可以稍后返回并测量任何行的时间戳之间的时间差。您可能不想在简单触发期间执行此操作,因为我认为简单触发必须在 30 秒内结束。
    猜你喜欢
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多