OnChangeTrigger 没有 运行 并且在 GAS 触发器面板中有错误消息

OnChangeTrigger does not run and have an error message in the GAS trigger panel

我不明白为什么我的触发器 运行 不正确。

我编写此脚本是为了自动记录在此传播中执行的所有更改sheet。这些日志将写入“D4:H”范围内的 sheet“管理 Sheet”。必须在此范围内填写的字段将是:[1--> 用户电子邮件,2--> new Date(),"--> changeType,4--> sheetName,5-->修改范围)]

function setUpTrigger(){
  ScriptApp.newTrigger('loggerModifFunction')
  .forSpreadsheet('ss Id')
  .onChange()
  .create();
}

function loggerModifFunction(e) {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Management Sheet').getRange(e.range.getLastRow(), 5).setValue([user,new Date(),changeType,sheetName,range]);
}

Google 脚本 window 显示以下错误:

"TypeError: Cannot read property 'lastRow'of undefined".

试试这个

function loggerModifFunction(e) {
  Browser.msgBox(JSON.stringify(e))
}

这将向您显示可用的信息!

{"authMode":"FULL","changeType":"EDIT","source":{},"triggerUid":"123456789012345","user":{"email":"XXX@gmail.com","nickname":"XXXX"}}

在任何情况下,您都无法获取 e.range userchangeType

您可以获取例如 e.user.emaile.changeType

代码#1

function setUpTrigger() {
  ScriptApp.newTrigger('loggerModifFunction')
    .forSpreadsheet('ssID1')
    .onChange()
    .create();
}

function loggerModifFunction(e) {
  var ss = SpreadsheetApp.openById('ssID2')
  var sh = ss.getSheetByName('Management Sheet')
  sh.appendRow([e.user.nickname, new Date(), e.changeType, e.source.getActiveSheet().getName(), e.source.getActiveRange().getA1Notation()])
}

哪里

  • ssID1 : 我要调查的电子表格的 ID
  • ssID2 : 我要收集并写入更改的电子表格的ID(代码内置在这个电子表格中)

代码#2

如果你想要一个特定的位置并排除一些工作表

function loggerModifFunction(e) {
  var ss = SpreadsheetApp.openById('1HlRT30uvpPD7GNrv2aRZydO1a3zc0kQOulGBd_0mc3k')
  var sh = ss.getSheetByName('Management Sheet')
  var sheetName = e.source.getActiveSheet().getName()
  var excl = ['Sheet1','Sheet2'];//excluded sheets
  if (excl.indexOf(sheetName) == -1){
    sh.getRange(sh.getLastRow()+1,4,1,5).setValues([[e.user.nickname, new Date(), e.changeType, sheetName, e.source.getActiveRange().getA1Notation()]])}
}

注意事项

如果您不在同一个组织中,由于权限策略,您将无法恢复用户(除了您自己)

范围不在事件对象中

获取事件对象的代码:

function onMyChange(e) {
  JSON.stringify(e));
}

事件对象:

"authMode":"","changeType":"","source":{},"triggerUid":"","user":{"email":"","nickname":""}}