You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用FormApp.getActiveForm()时出现间歇性报错求助

解决Google Forms脚本“无法检索表单数据”错误

错误详情

2023年1月5日 上午11:03:48 错误 异常:无法检索表单数据,请稍后重试。位于processForm(代码:2:22)

出错代码行:

var form = FormApp.getActiveForm();

问题原因

FormApp.getActiveForm()并非表单提交触发器场景下的可靠调用方式:

  • 当脚本作为表单提交触发事件运行时,当前执行上下文不一定处于“活跃表单”状态,容易触发权限或服务临时异常。
  • 脚本中已存在通过触发事件直接获取响应的正确代码(被注释部分),却额外通过拉取整个表单所有响应来获取最新提交,既低效又易出错。

修正方案

直接使用触发器事件对象event获取当前提交的响应数据,无需调用getActiveForm():

  1. 启用被注释的const itemResponses = event.response.getItemResponses();代码
  2. 删除从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 23:50:15