发布
社区首页 >问答首页 >OnChangeTrigger没有运行,并且在GAS触发器面板中有错误消息。

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

Stack Overflow用户
提问于 2022-01-23 12:15:28
回答 2查看 63关注 0票数 0

我不明白为什么我的扳机不能正确运行。

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

代码语言:javascript
代码运行次数:0
复制
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窗口显示以下错误:

"TypeError:无法读取属性‘lastRow’的未定义“.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-23 12:45:22

尝尝这个

代码语言:javascript
代码运行次数:0
复制
function loggerModifFunction(e) {
  Browser.msgBox(JSON.stringify(e))
}

这将向您展示什么信息是可用的!

代码语言:javascript
代码运行次数:0
复制
{"authMode":"FULL","changeType":"EDIT","source":{},"triggerUid":"123456789012345","user":{"email":"XXX@gmail.com","nickname":"XXXX"}}

在任何情况下,您都不能获取e.range ( userchangeType )。

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

代码1

代码语言:javascript
代码运行次数:0
复制
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()])
}

哪里

spreadsheet)

  • ssID1:我想调查的电子表格的ID,

  • ssID2:电子表格的ID,我想要收集和编写更改(代码是在这个

  • 中构建的)

代码2

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

代码语言:javascript
代码运行次数:0
复制
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()]])}
}

注意:

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

票数 2
EN

Stack Overflow用户

发布于 2022-01-23 19:11:37

范围不在事件对象中。

获取事件对象的代码:

代码语言:javascript
代码运行次数:0
复制
function onMyChange(e) {
  JSON.stringify(e));
}

事件对象:

代码语言:javascript
代码运行次数:0
复制
"authMode":"","changeType":"","source":{},"triggerUid":"","user":{"email":"","nickname":""}}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70821920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档