Google Apps Script未触发:表单提交自动加日期失败求助
调试与解决思路
1. 触发器类型错误(核心问题)
你设置的是「修改时」触发器,但Google表单提交到表格的操作,不会触发普通的编辑类触发器,必须配置**「表单提交」类型**的触发器:
- 打开脚本编辑器,点击左侧「触发器」图标
- 点击「添加触发器」
- 选择函数:
onFormSubmit - 选择事件源:「从表单」
- 选择事件类型:「表单提交」
- 保存并完成权限授权
2. 代码逻辑优化(避免无效追加&利用事件对象)
当前代码会在表单提交时额外新增一行,但表单提交本身已经会在表格生成新行,正确做法是在提交的目标行内添加日期,同时可以直接用事件对象里的提交时间戳,无需重新生成:
function onFormSubmit(e) { // 打印事件数据用于调试 console.log("Form submit event:", e); var formSheetName = "Form responses"; var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(formSheetName); // 获取表单提交对应的行号 var targetRow = e.range.getRow(); // 用事件自带的提交时间,比手动生成更准确 var submitTime = new Date(e.timestamp); var formattedDate = Utilities.formatDate(submitTime, "GMT", "dd/MM/yyyy"); var formattedTime = Utilities.formatDate(submitTime, "GMT", "HH:mm:ss"); // 将日期写入当前行的最后一列,时间写入倒数第二列(可根据实际列数调整) sheet.getRange(targetRow, sheet.getLastColumn() + 1).setValue(formattedDate); sheet.getRange(targetRow, sheet.getLastColumn()).setValue(formattedTime); }
3. 调试验证步骤
- 查看执行日志:在脚本编辑器中点击「查看」→「执行日志」,检查表单提交时是否有日志输出,无输出则说明触发器未触发
- 重新授权触发器:若权限过期会导致触发器失效,可删除现有触发器后重新添加并授权
- 确认表单关联:检查Google表单的响应目标是否正确指向当前表格的「Form responses」工作表
- 测试事件对象:手动执行时
e为undefined属于正常,但表单提交时e会包含完整提交数据,通过日志可确认是否获取到有效事件数据
内容的提问来源于stack exchange,提问作者Harvey
相关产品推荐
相关产品推荐

