【问题标题】:Timestamp is generated when cell is not empty. If blank, timestamp is cleared当单元格不为空时生成时间戳。如果为空,则清除时间戳
【发布时间】:2019-11-28 13:50:13
【问题描述】:

我正在尝试创建一个脚本,当您在第 2 列中输入一个值时,它会生成一个时间戳,如果单元格为空白,时间戳会自行清除。

我试图将“我的代码”和“其他代码”结合起来。 问题是,当我清除第 2 列中的单元格时,时间戳仍保留在第 1 列中。

如何修复我的代码以使其正常工作?

如果有人可以提供帮助,请给你力量。

编辑:@Raserhin 已经回答了

我的代码:original source

function onEdit(e) {
    var s = e.source.getActiveSheet(),
        watchCols = [2],
        offsetCol = [-1],
        ind = watchCols.indexOf(e.range.columnStart)
        if (s.getName() !== "work" || ind === -1) return;
    e.range.offset(0, offsetCol[ind])
        .setValue(new Date());
}

我尝试与之结合的其他代码。 How to modify current insert timestamp script to remove timestamp when cell is cleared

function onEdit(e) {
  var rg=e.range;
  var sh=e.range.getSheet();
  var name=sh.getName();
  if(name=="CHECK OUT" || name== "CHECK IN" || name== "MISC OUT" || name=="MISC IN"){  
    if(rg.columnStart==1) {
      var vA=rg.getValues();
      for(var i=0;i<vA.length;i++){
        if(vA[i][0]) {
          sh.getRange(rg.rowStart + i,8).setValue(new Date());
        }else{
          sh.getRange(rg.rowStart + i,8).setValue('');    
        }
      }
    }
  }
}

我的组合代码: https://docs.google.com/spreadsheets/d/13zGg9TUFQcqapG6-ZxB3CPJNwFsisxT98gbkrqU0Wns/edit?usp=sharing

function onEdit(e) {
    var rg=e.range;
    var sh=e.range.getSheet();
    var name=sh.getName();
    var s = e.source.getActiveSheet(),
        watchCols = [2],
        offsetCol = [-1],
        ind = watchCols.indexOf(e.range.columnStart)
        if (s.getName() !== "work" || ind === -1) return;
    e.range.offset(0, offsetCol[ind])
        .setValue(new Date());
    if(rg.columnStart==1) {
    var vA=rg.getValues();
    for(var i=0;i<vA.length;i++){
      if(vA[i][0]) {
        sh.getRange(rg.rowStart + i,8).setValue(new Date());
      }else{
        sh.getRange(rg.rowStart + i,8).setValue('');    
      }
    }
  }
}

编辑: 感谢@Raserhin 注意到我的错误。

//Working code
function onEdit(e) {
  var rg=e.range;
  var sh=e.range.getSheet();
  var name=sh.getName();
  var s = e.source.getActiveSheet(),
      watchCols = [2],
      offsetCol = [-1],
      ind = watchCols.indexOf(e.range.columnStart)
  if (s.getName() !== "work" || ind === -1) return;
  e.range.offset(0, offsetCol[ind])
  .setValue(new Date());
  if(rg.columnStart==2) { // Change 1 to 2
    var vA=rg.getValues();
    for(var i=0;i<vA.length;i++){
      if(vA[i][0]) {
        sh.getRange(rg.rowStart + i,1).setValue(new Date()); // Change 8 to 1 
      }else{
        sh.getRange(rg.rowStart + i,1).setValue('');    // Change 8 to 1
      }
    }
  }
}

【问题讨论】:

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


    【解决方案1】:

    我复制并测试了您的“组合代码”,只有两个小细节。

    在if 语句中检查已编辑的列,在工作表中从索引 1 开始。

    您还可以更改日期的值,您将 8 作为没有意义的列。

    使您的代码适合我的编辑:

    function onEdit(e) {
      var rg=e.range;
      var sh=e.range.getSheet();
      var name=sh.getName();
      var s = e.source.getActiveSheet(),
          watchCols = [2],
          offsetCol = [-1],
          ind = watchCols.indexOf(e.range.columnStart)
      if (s.getName() !== "work" || ind === -1) return;
      e.range.offset(0, offsetCol[ind])
      .setValue(new Date());
      if(rg.columnStart==2) { // Change 1 to 2
        var vA=rg.getValues();
        for(var i=0;i<vA.length;i++){
          if(vA[i][0]) {
            sh.getRange(rg.rowStart + i,1).setValue(new Date()); // Change 8 to 1 
          }else{
            sh.getRange(rg.rowStart + i,1).setValue('');    // Change 8 to 1
          }
        }
      }
    }
    

    我已经尝试过@JPV 答案,但对我不起作用。

    【讨论】:

    • 感谢它的工作。我没有注意到我忘记更改之前脚本中的值。谢谢指正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2019-06-13
    • 2019-06-21
    • 2019-02-20
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多