You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 08:32:40