绑定Google Sheet的App Script表单提交触发器关闭后失效求助
问题:Google Sheet绑定的App Script表单提交触发器仅在Sheet打开时生效
我有一个绑定到关联Google表单的Google Sheet的App Script,通过on form submit触发器执行,功能包括更新Sheet数据、调用API、获取图片嵌入邮件并发送给表单提交者。当Sheet在浏览器中打开时,所有功能正常运行;但关闭Sheet后,提交表单时触发器完全不执行,执行记录中也没有任何痕迹。
功能目标
- 用户提交表单时生成UID并添加至Sheet
- 通过API将UID嵌入二维码并上传至Google Drive
- 脚本从Drive获取PNG格式二维码,嵌入邮件发送给用户
代码实现
var ID_LENGTH = 20; // 生成随机UID function generateUID () { var ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; var rtn = ''; for (var i = 0; i < ID_LENGTH; i++) { rtn += ALPHABET.charAt(Math.floor(Math.random() * ALPHABET.length)); } return rtn; } function autoResponder(e) { console.log("Trigger begin"); // 获取指定Sheet const sheetID = 'spreadsheetID'; var ss = SpreadsheetApp.openById(sheetID).getSheetByName('sheetName'); var sheetname = ss.getName(); // 生成UID var responseId = generateUID() // 为当前表单提交行添加UID和状态 var formrow = e.range.rowStart ss.getRange(formrow, 25).setValue(responseId); ss.getRange(formrow, 26).setValue("FALSE"); // 调用API const api_url = `https://myapi.com/test` var api_response = UrlFetchApp.fetch(api_url); console.log(api_response.getContentText()); // 从Drive获取二维码图片 var file = DriveApp.getFolderById('folder-id').getFilesByName(`${responseId}.png`).next().getBlob() var name = e.namedValues.Name var email = e.namedValues['Email address'][0] console.log(e.namedValues['Email address'][0]) var adminEmail = "abc@xyz.com" // 发送内嵌图片的邮件 MailApp.sendEmail({ to: email, subject: "email subject", htmlBody: '<html>Some html code</html>', inlineImages: { image: file } }); }
已尝试的解决方法
- 将
e.source.getActiveSheet()替换为硬编码的Sheet ID和名称 - 删除并重新创建
onFormSubmit触发器 - 通过代码方式创建触发器
复现步骤
- 创建Google表单并关联到Google Sheet
- 在绑定Sheet的App Script中编写邮件发送函数
- 添加Sheet的
onFormSubmit触发器 - 关闭Sheet的浏览器实例后提交表单,触发器不执行
排查与状态更新
- 排查后确认代码无问题,更换账号测试结果一致,疑似Google平台Bug,存在历史相关Bug记录
- 更新:功能突然恢复正常,推测Google已修复该问题,已提交Issue,若再次失效会更新状态
内容的提问来源于stack exchange,提问作者Valeron Toscano
相关产品推荐
相关产品推荐

