【问题标题】:How do I bypass the on Edit limitation (Google Script) for timestamp in the below Case?在以下情况下,如何绕过时间戳的 on Edit 限制(Google 脚本)?
【发布时间】:2019-12-19 18:47:38
【问题描述】:

我知道谷歌脚本中的 onEdit(e) 函数存在限制。 我在我的代码中添加了一个 timeStamp onEdit 函数,我希望在我复制/粘贴(插入)数据时将数据和时间注册到我的电子表格中。

问题是,当我一次插入一行时,代码运行良好,但每次我一次在多行中添加副本时,onEdit(e) 函数不会注册。

有没有办法绕过这个?

这是我用另一个 onEdit(e) 函数调用的 timeTamp 函数(e)。

function onEdit(e) {
  timeStamp(e)
}

function timeStamp(e) {

  var ss = SpreadsheetApp.getActiveSheet();
  var r = ss.getActiveCell();
  //1.Change 'Test' to be matching your sheet name
  if (r.getColumn() < 7 && ss.getName()=='Test') { // 2. If Edit is done in any column before Column (G)  And sheet name is Test then:
   var celladdress ='G'+ r.getRowIndex() 
    ss.getRange(celladdress).setValue(new Date()).setNumberFormat("MM/dd/yyyy hh:mm");
  }
};

【问题讨论】:

    标签: function google-apps-script google-sheets spreadsheet


    【解决方案1】:
    function onEdit(e) {
      var sh=e.range.getSheet();
      if(sh.getName()!="Test" && e.range.columnStart<7)return;
      var ts=Utilities.formatDate(new Date(), Session.getScriptTimeZone(),"MM/dd/yy HH:mm")
      var l=e.range.getHeight();
      for(var i=0;i<l;i++) {
        sh.getRange(i+e.range.rowStart,7).setValue(ts)
      }
    }
    

    TheMaster 建议的解决方案可能是更好的方法。

    function onEdit(e) {
      var sh=e.range.getSheet();
      if(sh.getName()!="Sheet1"){return;}
      if(e.range.columnStart<7) {
        var ts=Utilities.formatDate(new Date(), Session.getScriptTimeZone(),"MM/dd/yy HH:mm");
        sh.getRange(e.range.rowStart,7,e.range.rowEnd-e.range.rowStart+1,1).setValue(ts);
      }
    }
    

    我稍作修改,去掉了 getHeight() 函数

    【讨论】:

    • 谢谢库珀!它就像一个魅力!我看到您添加了一个 for 循环来检查每次是否在该范围之间进行了更改。我理解正确吗?
    • 它实际上并不检查是否对每一行进行了更改。这一切都由一个 onEdit() 事件触发。您实际上无法确定每行中的单元格是否已更改,因为 e.oldValue 仅记录左上角。因此它会粘贴您复制的任何内容而不检查更改。
    • 让我补充一点,我认为使用 onEdit() 会导致问题。所以请谨慎使用。
    • 哦,我明白了,我想了很多,也从阅读的内容中得出。问题,在我上面的代码中,只有当对 An:Fn 列进行任何更改时,我才有一个注册时间范围。是否可以将此范围限制添加到您的修复中? (我试图让你的修复适应我目前拥有的,但它最终破坏了它。
    • 什么意思?
    猜你喜欢
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2021-05-29
    • 2013-10-04
    相关资源
    最近更新 更多