Function 在下面的例子中,如何绕过时间戳的on-Edit限制(谷歌脚本)?

Function 在下面的例子中,如何绕过时间戳的on-Edit限制(谷歌脚本)?,function,google-apps-script,google-sheets,spreadsheet,Function,Google Apps Script,Google Sheets,Spreadsheet,我知道谷歌脚本中的onEdit(e)函数有一个限制。 我在代码中添加了一个timeStamp onEdit函数,每当我在电子表格中复制/粘贴(插入)数据时,我都希望在电子表格中注册数据和时间 问题是,当我一次插入一行时,代码可以完美地工作,但每次我在多行中添加副本时,onEdit(e)函数都不会注册 有没有办法绕过这个 这是我的timeTamp函数(e),我用另一个onEdit(e)函数调用它 function onEdit(e) { timeStamp(e) } function tim

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

问题是,当我一次插入一行时,代码可以完美地工作,但每次我在多行中添加副本时,onEdit(e)函数都不会注册

有没有办法绕过这个

这是我的timeTamp函数(e),我用另一个onEdit(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");
  }
};
函数onEdit(e){
时间戳(e)
}
函数时间戳(e){
var ss=SpreadsheetApp.getActiveSheet();
var r=ss.getActiveCell();
//1.将“测试”更改为与您的工作表名称匹配
如果(r.getColumn()<7&&ss.getName()=='Test'){//2。如果在列(G)之前的任何列中进行了编辑,并且工作表名称为Test,则:
var celladdress='G'+r.getRowIndex()
ss.getRange(celladdress).setValue(new Date()).setNumberFormat(“MM/dd/yyyy hh:MM”);
}
};
功能OneEdit(e){
var sh=e.range.getSheet();

if(sh.getName()!=“Test”&&e.range.columnStartThank you Cooper!它像一个符咒一样工作!我看到你每次都添加了一个for循环来检查该范围之间是否有更改。我理解正确了吗?它实际上不会检查每一行是否有更改。它都是由一个onEdit()触发的事件。您无法实际确定每行中的单元格是否已更改,因为e.oldValue仅记录在左上角。因此,它会粘贴您复制的任何内容,而不检查更改。让我补充一点,我会考虑使用onEdit()进行粘贴可能会导致问题。所以要谨慎使用。哦,我明白了,我也这么认为,而且从阅读的内容来看也是如此。问题,在我上面的代码中,我有一个注册时间的范围,只有在An:Fn列进行了任何更改时才可以。是否可以将此范围限制添加到您的修复中?(我试图使您的修复程序适应我目前拥有的功能,但它最终破坏了它。您的意思是什么?
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)
  }
}
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);
  }
}