Google表单触发Google表格邮件通知时出现TypeError错误求助
解决Google表单提交触发邮件时报错TypeError: Cannot read properties of undefined (reading 'columnStart')
报错原因
你创建的是表单绑定的onFormSubmit触发器,这类触发器的事件对象结构和表格编辑(onEdit)触发器完全不同:e.range和e.value是表格触发器专属的属性,表单触发器的事件对象里根本不存在这些属性,所以直接访问会报错。
解决方案(推荐方案:改用表格绑定触发器)
这种方案和你原有onEdit的逻辑更匹配,只需要修改触发器创建函数,并调整多选选项的判断逻辑(因为多选问题的响应是数组):
1. 修改触发器创建函数
function activadorPrueba() { // 获取表单对应的响应表格(确保脚本已绑定在该表格上) const targetSheet = SpreadsheetApp.getActiveSpreadsheet(); ScriptApp.newTrigger('notificarMailVencido') .forSpreadsheet(targetSheet) .onFormSubmit() .create(); }
2. 调整邮件通知函数
针对多选问题的响应特性(返回数组),修改判断逻辑:
function notificarMailVencido(e){ // 过滤非目标列(第6列,对应表单第6个问题)的提交 if (e.range.columnStart !== 6) return; const targetOption = "Si, pero está vencida"; // 处理单选/多选的不同响应格式:单选返回字符串,多选返回数组 const isOptionSelected = Array.isArray(e.value) ? e.value.includes(targetOption) : e.value === targetOption; if (!isOptionSelected) return; let patente = SpreadsheetApp.getActiveSpreadsheet().getName(); let msg = "El vehiculo patente " + patente + " tiene la poliza vencida."; MailApp.sendEmail("[mailHere]","aviso poliza", msg); }
备选方案:适配表单绑定触发器
如果坚持使用表单绑定的触发器,需要通过e.response获取表单响应数据:
function notificarMailVencido(e){ const targetQuestionIndex = 5; // 目标问题是表单第6个问题(索引从0开始) const targetOption = "Si, pero está vencida"; // 获取所有问题的响应 const allResponses = e.response.getItemResponses(); const targetResponse = allResponses[targetQuestionIndex]; if (!targetResponse) return; // 获取选中的选项(单选返回字符串,多选返回数组) const selectedItems = targetResponse.getResponse(); const isOptionSelected = Array.isArray(selectedItems) ? selectedItems.includes(targetOption) : selectedItems === targetOption; if (isOptionSelected) { // 获取表单关联的响应表格名称作为车牌号 const form = FormApp.openById("[googleFormIdIsHere]"); const sheet = SpreadsheetApp.openById(form.getDestinationId()); let patente = sheet.getName(); let msg = "El vehiculo patente " + patente + " tiene la poliza vencida."; MailApp.sendEmail("[mailHere]","aviso poliza", msg); } }
内容的提问来源于stack exchange,提问作者Juancho
相关产品推荐
相关产品推荐

