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

Apps Script触发执行仅删除Google Form问题未重建的故障求助

问题:Google Apps Script触发执行仅删除表单问题,无法重建新问题

手动在App Script后台执行以下脚本时,旧选择题能被正常删除,新问题也能成功生成;但设置表单提交触发或每分钟定时触发后,触发执行仅删除旧问题,无法创建新的选择题。

脚本代码

function clearMultipleChoiceQuestions() {
  var form = FormApp.openById(destinationForms); // 获取目标表单
  var items = form.getItems(FormApp.ItemType.MULTIPLE_CHOICE); // 获取所有选择题
  let sleepDurations = items.length*1000
  
  // 遍历删除每个选择题
  for (var i = 0; i < items.length; i++) {
    form.deleteItem(items[i]); // 移除表单项目
  }
  console.log("Sleeping for "+sleepDurations/1000+" second(s)")
  Utilities.sleep(sleepDurations)
}

function createMultipleChoiceQuestion(countRandomQuestion=2) {
  clearMultipleChoiceQuestions() // 创建新问题前删除所有旧问题
  let form = FormApp.openById(destinationForms); // 获取目标表单
  let questionList = getQuestionsAndChoice()
  let selectedQuestions = pickRandomQuestionsWithOptions(questionList,countRandomQuestion)
  let item = ""
  console.log("Generating Question...")
  for(var title in selectedQuestions){
    let question_title = selectedQuestions[title]['question']
    let question_choices = selectedQuestions[title]['options']
    console.log("Adding question: "+question_title)
    console.log("Adding choices: "+question_choices)

    // 添加选择题
    item = form.addMultipleChoiceItem();
     item.setTitle(question_title)
    .setChoiceValues(question_choices); // 设置选项
  }
}

可能原因与解决方案

1. 权限差异问题

手动执行脚本使用当前登录用户权限,触发执行则使用脚本服务账号权限。如果getQuestionsAndChoice()或pickRandomQuestionsWithOptions()依赖外部资源(如存储问题的Google表格),服务账号可能无访问权限。

  • 给脚本服务账号共享依赖资源:打开资源文件,点击「共享」,添加脚本服务账号邮箱(可在App Script后台「项目设置」中找到)
  • 在createMultipleChoiceQuestion中加入console.log(questionList)和console.log(selectedQuestions),查看触发执行时这两个变量是否有值,判断数据源是否读取失败

2. 删除逻辑的索引偏移问题

正序删除表单项目时,删除第i个项目后,后续项目索引会前移,导致循环跳过部分项目,同时可能影响后续添加操作的稳定性。

  • 修改clearMultipleChoiceQuestions的循环为倒序删除:
    for (var i = items.length - 1; i >= 0; i--) {
      form.deleteItem(items[i]);
    }
    

3. 变量作用域问题

如果destinationForms是仅在手动执行时临时定义的全局变量,触发执行时可能未正确初始化,导致表单无法正常访问。

  • 在脚本中明确定义destinationForms:
    const destinationForms = "你的目标表单ID"; // 替换为实际的表单ID
    

4. 不必要的延迟问题

Utilities.sleep并非必须,表单操作是同步执行的,多余的延迟可能导致触发执行超时或状态异常。

  • 删除clearMultipleChoiceQuestions中的Utilities.sleep(sleepDurations)代码

5. 捕获错误排查

在createMultipleChoiceQuestion中添加错误捕获,记录详细错误信息:

function createMultipleChoiceQuestion(countRandomQuestion=2) {
  try {
    clearMultipleChoiceQuestions()
    let form = FormApp.openById(destinationForms);
    let questionList = getQuestionsAndChoice()
    console.log("获取到的问题列表:", questionList)
    let selectedQuestions = pickRandomQuestionsWithOptions(questionList,countRandomQuestion)
    console.log("选中的问题:", selectedQuestions)
    let item = ""
    console.log("Generating Question...")
    for(var title in selectedQuestions){
      let question_title = selectedQuestions[title]['question']
      let question_choices = selectedQuestions[title]['options']
      console.log("Adding question: "+question_title)
      console.log("Adding choices: "+question_choices)
      item = form.addMultipleChoiceItem();
      item.setTitle(question_title)
      .setChoiceValues(question_choices);
    }
  } catch (e) {
    console.error("执行出错:", e.message, e.stack)
  }
}

6. 查看完整执行日志

进入App Script后台,点击左侧「执行」选项,找到触发执行的记录,查看详细日志,确认是否有报错信息(如权限错误、变量未定义等)

内容的提问来源于stack exchange,提问作者Cignitor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:33:20