调用FormApp.getActiveForm()时出现间歇性报错求助
解决Google Forms脚本“无法检索表单数据”错误
错误详情
2023年1月5日 上午11:03:48 错误 异常:无法检索表单数据,请稍后重试。位于processForm(代码:2:22)
出错代码行:
var form = FormApp.getActiveForm();
问题原因
FormApp.getActiveForm()并非表单提交触发器场景下的可靠调用方式:
- 当脚本作为表单提交触发事件运行时,当前执行上下文不一定处于“活跃表单”状态,容易触发权限或服务临时异常。
- 脚本中已存在通过触发事件直接获取响应的正确代码(被注释部分),却额外通过拉取整个表单所有响应来获取最新提交,既低效又易出错。
修正方案
直接使用触发器事件对象event获取当前提交的响应数据,无需调用getActiveForm():
- 启用被注释的
const itemResponses = event.response.getItemResponses();代码 - 删除从
var form = FormApp.getActiveForm();到var itemResponses = latestResponse.getItemResponses();的冗余代码段
修正后的完整脚本
function processForm(event) { const itemResponses = event.response.getItemResponses(); const propertyAddress = itemResponses[0].getResponse(); Logger.log("Processing address " + propertyAddress); // 获取单元数量,索引为5 const moreThan200Units = parseInt(itemResponses[5].getResponse(), 10); var mainFolder = null; if(moreThan200Units > 199) { mainFolder = DriveApp.getFolderById('xx'); } else { mainFolder = DriveApp.getFolderById('yy'); } var propertyFolder = null; for (var i = 0; i < itemResponses.length; i++) { Logger.log(itemResponses[i].getItem().getType()) if (itemResponses[i].getItem().getType() == "FILE_UPLOAD") { if(propertyFolder == null) { propertyFolder = mainFolder.createFolder(propertyAddress); } var ids = itemResponses[i].getResponse(); for (var j = 0; j < ids.length; j++) { var uploadedFile = DriveApp.getFileById(ids[j]); Logger.log("Moving file" + uploadedFile + " to " + propertyFolder); uploadedFile.moveTo(propertyFolder); } } } }
内容的提问来源于stack exchange,提问作者klind
相关产品推荐
相关产品推荐

