Google Sheets脚本疑问:createAbsenceAlert未传参却能获取编辑信息?
问题
我写的这段Google Apps Script代码运行完全正常,但我搞不懂其中逻辑:createAbsenceAlert()明明没有接收任何参数,它是怎么知道哪些单元格被编辑以及对应值的?
代码如下:
const workBook = SpreadsheetApp.getActiveSpreadsheet(); function onEdit(e) { var eventValue = e.value if (eventValue === "Absent" && e.range.getColumn() === 3) { var emailAbsenceDetails = createAbsenceAlert(); } return; }; function createAbsenceAlert() { var absentPerson = workBook.getSheetName(); var vmsSender = workBook.getName() // extract name of sender from file name .split(/\s+/) .slice(0, -2) .join(" "); const editRecord = workBook.getSheetByName("editRecord"); let trg = editRecord.getRange(3, 3).getDataRegion().getLastRow() // format date. let date = new Date().toLocaleDateString('en-GB', { hour: "numeric", minute: "numeric" }) var absenceDetails = date + ": " + absentPerson + " has just been marked absent from " + vmsSender + "'s appointment"; return absenceDetails };
补充说明:这个Google表格包含多个工作表,还有其他代码依赖我理解这段逻辑,麻烦帮忙解答。
解答
核心结论:createAbsenceAlert()根本没有获取任何编辑单元格的具体信息,它的逻辑和编辑事件的单元格内容无关,只是依赖当前表格的状态:
onEdit(e)是Google Sheets的内置触发函数,单元格被编辑时会自动触发,并且会接收一个事件对象e——这个e包含了编辑的单元格范围、新值等信息。- 在
onEdit(e)里,你已经通过e.value和e.range.getColumn()判断了编辑的是第3列且值为"Absent",满足条件才会调用createAbsenceAlert(),但调用时并没有把e或编辑单元格的信息传给它。 createAbsenceAlert()的实际逻辑:absentPerson取的是当前活跃工作表的名称(也就是你编辑单元格所在的那个工作表的名字),不是编辑单元格里的人名;vmsSender是从整个表格的文件名里提取的;- 日期是当前系统时间;
- 最后拼接的提示文本,并没有用到编辑单元格的具体内容(比如编辑行的其他数据),只是利用了"编辑触发函数"这个时机,结合工作表名、文件名和当前时间生成内容。
简单说,你觉得它"知道编辑信息"是误解——它只是在满足编辑条件时被调用,但本身并没有获取编辑单元格的具体数据,只用到了表格和工作表的名称,以及当前时间。
内容的提问来源于stack exchange,提问作者Mr G
相关产品推荐
相关产品推荐

