Javascript 单个OneEdit函数有效-同一函数的多个函数无效

Javascript 单个OneEdit函数有效-同一函数的多个函数无效,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正在使用Google Sheets,我有两个功能onEdit和oncommedit,它们工作得很好,可以为各自的工作表添加时间戳。如果我复制并粘贴其中一个函数,并给出一个新的函数名,那么额外的功能似乎就不起作用了 我点错东西了吗?或者我应该为同一功能中的所有工作表命名?(我创建了重复项,因为写入列因工作表而异。) 函数onOpen(){ var sheet=SpreadsheetApp.getActiveSpreadsheet(); var条目=[{name:“最后一行”,functionNa

我正在使用Google Sheets,我有两个功能onEditoncommedit,它们工作得很好,可以为各自的工作表添加时间戳。如果我复制并粘贴其中一个函数,并给出一个新的函数名,那么额外的功能似乎就不起作用了

我点错东西了吗?或者我应该为同一功能中的所有工作表命名?(我创建了重复项,因为写入列因工作表而异。)

函数onOpen(){ var sheet=SpreadsheetApp.getActiveSpreadsheet(); var条目=[{name:“最后一行”,functionName:“goto_Last”}]; 添加菜单(“快捷方式”,条目); myFunction(); }; 函数goto_last(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var mysheet=ss.getActiveSheet(); var lastrow=mysheet.getLastRow(); setActiveCell(mysheet.getDataRange().offset(lastrow-1,0,1,1)); }; 函数onEdit(){ var s=SpreadsheetApp.getActiveSheet(); 如果(s.getName()=“主日志”){ var r=s.getActiveCell(); var user=Session.getActiveUser().getEmail(); 如果(r.getColumn()!=13){//检查该列 var row=r.getRow(); 变量时间=新日期(); 时间=实用程序.formatDate(时间,“GMT-08:00”,“yyyy-MM-dd,hh:MM:ss”); SpreadsheetApp.getActiveSheet().getRange('M'+行.toString()).setValue(时间); 电子表格app.getActiveSheet().getRange(“N”+行.toString()).setValue(用户); } }; }; 函数myFunction(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var mysheet=ss.getActiveSheet(); var lastrow=mysheet.getLastRow(); setActiveCell(mysheet.getDataRange().offset(lastrow-1,0,1,1)); }; 函数onCommsEdit(){ var s=SpreadsheetApp.getActiveSheet(); 如果(s.getName()=“已收到报告”){ var r=s.getActiveCell(); var user=Session.getActiveUser().getEmail(); 如果(r.getColumn()!=11){//检查该列 var row=r.getRow(); 变量时间=新日期(); 时间=实用程序.formatDate(时间,“GMT-08:00”,“yyyy-MM-dd,hh:MM:ss”); SpreadsheetApp.getActiveSheet().getRange('K'+行.toString()).setValue(时间); SpreadsheetApp.getActiveSheet().getRange(“L”+行.toString()).setValue(用户); } }; }; 必须创建才能自动调用函数

不建议使用
onEdit
条件调用多个函数,因为执行顺序没有很好地定义。我也不建议命名一个需要
已安装触发器的函数,使其与相应的
简单触发器匹配,换句话说,一个需要授权范围并在修改电子表格值后运行的函数不应被称为
onEdit(e)
,因为这是激活简单触发器的函数名。如果您的函数不需要授权作用域,那么您可以使用简单触发器

就您的程序设计而言,您应该使用流控制。与多个函数相比,简单的分支就足够了:

function calledOnEdit(e) {
  if(!e) { throw new Error("This function requires an event object"); }

  // Use the event object rather than lookups that assume the active cell was the edited cell:
  var s = e.range.getSheet();
  var row = e.range.getRow();
  var col = e.range.getColumn();
  if( s.getName() == "Primary Log" && col != 13 ) { //checks the column
    logTimestamp(s, "M" + row + ":N" + row);
  } else if( s.getName() == "Received Report" && col != 11 ) { //checks the column
    logTimestamp(s, "K" + row + ":L" + row);
  }
}
function logTimestamp(sheet, a1ref) {
  var user = Session.getActiveUser().getEmail();
  var time = Utilities.formatDate(new Date(), "GMT-08:00", "yyyy-MM-dd, hh:mm:ss");
  sheet.getRange(a1ref).setValues([[time, user]]);
}

您到底想做什么?如何触发
oncommedit()
函数?另外,
myFunction()
goto_last()
是完全相同的函数,为什么需要相同函数的两个副本?非常有用。非常感谢。