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

谷歌表单提交触发PDF生成脚本报错 TypeError: 无法读取undefined的range属性

报错原因

你遇到的TypeError: Cannot read property 'range' of undefined错误,核心原因是代码运行时事件参数e未被正确传入,具体可分为三类情况:

  • 触发方式错误:直接在脚本编辑器手动点击运行代码,手动运行不会自动注入表单提交事件的e参数,只有绑定的触发器被表单提交动作触发时,系统才会自动传入该参数。
  • 触发器失效:原有的表单提交可安装触发器被系统禁用、权限过期、或关联的表格/表单权限变更,导致触发时没有传入事件参数。
  • 代码结构缺失:你贴出的代码缺少外层函数定义,触发逻辑必须包裹在接收e作为入参的函数中,否则e会是未定义状态。

另外你当前代码还存在一个隐藏问题:发邮件时引用的Name变量没有定义,修复完e的问题后还会触发变量未定义的报错。

修复方案

步骤1:补全代码结构

将你现有的代码全部包裹到接收事件参数的触发函数中,同时补充缺失的Name变量定义:

// 定义表单提交触发函数,必须接收e作为入参
function onFormSubmit(e) {
  const rg = e.range;
  console.log(rg.getA1Notation());
  const sh = rg.getSheet();
  
  // 获取表单提交数据
  const Email= e.namedValues['Email Address'][0];
  // 补充Name变量,把字段名替换为你表单里实际的姓名字段,不需要的话直接删除邮件里的Name引用
  const Name = e.namedValues['Your Name'][0];
  const LinkOrig = e.namedValues['Link(s) for where the original work appears'][0];
  const AttachOrig = e.namedValues['Copies of the original copyrighted work'][0];
  const Domain = e.namedValues['Infringing Domain'][0];
  const LinkInfring = e.namedValues['Link(s) for where infringing image appears online'][0];
  const Contact = e.namedValues['Contact Information'][0];
  const WHOIS = e.namedValues['WHOIS Search results'][0];
  const Date = e.namedValues['Date'][0];
  const Location = e.namedValues['Where are you based?'][0];
  
  // 定义存储文件夹、模板ID,替换为你自己的实际ID
  const DMCAFolderID = 'googledrivefolderidhere';
  const DMCALibFolder = DriveApp.getFolderById(DMCAFolderID);
  const TemplateFileID = 'googledrivetemplateidhere';
  const newFilename = 'DMCA Notice -' + TemplateFileID + 'Domain';
  
  // 复制模板文件
  const newTemplateFileID = DriveApp.getFileById(TemplateFileID).makeCopy(newFilename, DMCALibFolder).getId();
  
  // 填充模板内容
  var document = DocumentApp.openById(newTemplateFileID);
  var body = document.getBody();
  body.replaceText('{{LinkOrig}}', LinkOrig);
  body.replaceText('{{LinkInfring}}', LinkInfring);
  body.replaceText('{{ContactInfo}}', Contact);
  body.replaceText('{{WHOISResults}}', WHOIS);
  body.replaceText('{{date}}', Date);
  body.replaceText('{{location}}', Location);
  document.saveAndClose();

  // 组装邮件
  var subject = 'DMCA Notice - ' + Domain;
  var msgHtml = 
  "Hi " + Name + "," + "<br/>" + "<br/>" +
  "Please find your DMCA Notice attached." + "<br/>" + "<br/>" +
  "Sincerely," + "<br/>" +
  "Your Bada** Self" + "<br/>" 
  ;
  var attachment = DriveApp.getFileById(newTemplateFileID);

  // 发送带PDF附件的邮件
  GmailApp.sendEmail(Email, subject, msgHtml, {htmlBody: msgHtml, attachments: [attachment.getAs(MimeType.PDF)]});
}

步骤2:重新配置可安装触发器

  • 打开脚本编辑器左侧「触发器」面板,删除所有旧的失效触发器
  • 点击「添加触发器」,按如下配置:
    • 选择运行的函数:onFormSubmit
    • 选择事件来源:电子表格
    • 选择事件类型:表单提交时
    • 失败通知设置:建议选择即时通知,方便后续排查问题
  • 保存触发器后按照提示完成账号权限授权,遇到未验证应用提示时,选择「高级」-「继续前往[脚本名称]」即可完成授权。

步骤3:测试验证

不要在脚本编辑器手动点击运行,直接在关联的谷歌表单提交一条测试数据,前往脚本编辑器的「执行」面板查看运行日志,无报错即为修复成功。

内容的提问来源于stack exchange,提问作者taleesita

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:54:03