Google Apps Script表格自动邮件脚本getRange为null报错求助
错误根因
你遇到的TypeError: Cannot read property 'getRange' of null错误是因为sheet变量返回了空值,问题出在这行代码:
var sheet = ss.getSheetByName('sheet1');
getSheetByName()会严格匹配工作表名称,参数和实际名称有任何出入(大小写差异、多/少空格、名称完全不符)都会返回null,后续调用getRange自然报错。Google表单默认生成的响应工作表通常命名为「表单回应 1」(或英文环境下的Form Responses 1),和你代码里写的sheet1不一致是最常见的诱因。
修复步骤
- 第一步:打开绑定脚本的电子表格,查看底部工作表栏的实际名称,完全复制名称替换代码里的
'sheet1'即可,比如如果实际名称是表单回应 1,代码就改成:var sheet = ss.getSheetByName('表单回应 1'); - 第二步(可选优化):不要通过
getLastRow()拿最新提交的数据,高并发提交时容易拿错行,直接用表单提交事件对象获取当前提交的数据更稳妥,对应修改后的代码如下:// 需要设置表单提交触发器触发该函数,触发时会自动传入e事件对象 function emailConfirmation(e) { // 拿当前提交的一行数据,不需要读取整个工作表 const submitData = e.values; // 注意数组下标从0开始,原代码拿第2列是收件人,对应下标1;第4列是姓名对应下标3 const recipient = submitData[1]; const name = submitData[3]; const resno = e.range.getRow(); // 拿当前提交行的行号,用来判断是否是前5位 const subject = '[Khóa học viết luận học bổng] Xác nhận đăng ký tham gia'; let body; if (resno <= 5) { // 注意原代码Xin chào后面缺了空格,已补充 body = `Xin chào ${name}, \r\n Cảm ơn bạn đã đăng ký tham gia Khóa học viết luận học bổng. Chúc mừng bạn đã trở thành 1 trong 5 người điền đơn đầu tiên. Phương thức thanh toán cho khóa học là chuyển khoản.`; } else { body = `Xin chào ${name}, \r\n Cảm ơn bạn đã đăng ký tham gia Khóa học viết luận học bổng. Phương thức thanh toán cho khóa học là chuyển khoản.`; } MailApp.sendEmail(recipient, subject, body); }注意:使用事件对象版本的代码时,不要直接在脚本编辑器点击运行测试,手动运行不会自动传入提交事件参数,会触发报错,提交一次表单即可验证效果。
- 第三步:设置脚本触发器,触发来源选「电子表格」,触发事件选「表单提交时」,保存后按照提示完成脚本授权即可。
内容的提问来源于stack exchange,提问作者adrenaline245
相关产品推荐
相关产品推荐

