我不明白为什么我的扳机不能正确运行。
我编写这个脚本是为了自动记录在此电子表格中执行的所有更改。这些日志将写入"D4:H“范围内的工作表”管理表“中。必须在此范围内填写的字段为:1->用户电子邮件,2->新日期(),“->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窗口显示以下错误:
"TypeError:无法读取属性‘lastRow’的未定义“.
发布于 2022-01-23 12:45:22
尝尝这个
function loggerModifFunction(e) {
Browser.msgBox(JSON.stringify(e))
}
这将向您展示什么信息是可用的!
{"authMode":"FULL","changeType":"EDIT","source":{},"triggerUid":"123456789012345","user":{"email":"XXX@gmail.com","nickname":"XXXX"}}
在任何情况下,您都不能获取e.range
( user
或changeType
)。
您可以获取例如e.user.email
或e.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()])
}
哪里
spreadsheet)
代码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()]])}
}
注意:
如果您不在同一个组织中,由于权限策略,您将无法恢复用户(除了您自己)。
发布于 2022-01-23 19:11:37
范围不在事件对象中。
获取事件对象的代码:
function onMyChange(e) {
JSON.stringify(e));
}
事件对象:
"authMode":"","changeType":"","source":{},"triggerUid":"","user":{"email":"","nickname":""}}
https://stackoverflow.com/questions/70821920
复制相似问题