AppScript存储所有表单提交回复至单一文件时报getResponses非函数错误
AppScript 将表单回复同步到统一表格报错解决方案
报错原因
TypeError: id_form.getResponses is not a function 错误的核心诱因是 id_form 变量未获取到合法的 Google 表单实例,常见触发场景如下:
- 调用
setDestination_responses函数时传入的form参数不是有效表单对象,导致form.getId()取值异常,后续FormApp.openById执行失败 - 当前操作账号对目标表单没有编辑权限,无法正常读取表单实例
修复后可用代码
直接将表单ID硬编码到逻辑中可避免传参错误导致的异常,代码如下:
function setDestination_responses() { // 替换为你自己的Google表单ID const id_form = FormApp.openById('替换为你的表单ID'); // 目标存储表格ID const spreadsheet_responses = SpreadsheetApp.openById('1TX4GOsihKuXFhbZMhtFWPYmGwrxii0XhyGhyTKzPKhc'); const sheet_spreadsheet_responses = spreadsheet_responses.getSheets()[0]; const titles = id_form.getItems().map(e => e.getTitle()); const formResponses = id_form.getResponses(); const values = formResponses.map(f => f.getItemResponses().reduce((o, i) => { const r = i.getResponse(); return Object.assign(o, {[i.getItem().getTitle()]: Array.isArray(r) ? r.join(",") : r}); }, {})).map(o => titles.map(t => o[t] || "")); if (values.length === 0) { console.log(`VALUES EQUAL TO 0 ${values}`); } else { sheet_spreadsheet_responses.getRange(sheet_spreadsheet_responses.getLastRow() + 1, 1, values.length, values[0].length).setValues(values); } }
注意事项
- 首次运行代码需要按照提示完成表单、表格的读写权限授权
- 确认代码中填写的表单ID、表格ID正确,且当前操作账号对两个文件都有编辑权限
- 如果是用户提交表单后触发同步逻辑,建议绑定表单提交触发器,仅处理最新提交的单条回复,无需每次拉取全量历史回复,运行效率更高
内容的提问来源于stack exchange,提问作者alb
相关产品推荐
相关产品推荐

