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

通过Apps Script实现Google表单动态页面跳转遇TypeError问题求助

问题:Google表单下拉选项无法关联对应页面,报错「TypeError: item.createChoice is not a function」
  • 需求:基于指定Google Sheet生成动态Google表单,问题数量、页面数量、单页问题数量均为动态(单页最多10个问题)
  • 现状:已通过Apps Script完成表单生成,但下拉问题无法关联同名对应页面,尝试多种Stack Overflow示例无效,报错「TypeError: item.createChoice is not a function」

报错原因

你直接将formItems[0]赋值给item,但该对象是基础Item类型,不包含createChoice方法。必须先调用asListItem()将其转换为ListItem类型,才能使用下拉选项相关的专属方法。

修复后的代码

function updateForm(){
  var ss = SpreadsheetApp.getActive();
  var qsht = ss.getSheetByName("Questions");
  var qvals = qsht.getDataRange().getValues();
  var form = FormApp.openById("111Dqn_IJJn-QufnuZrvixToV_JsKZTzMx6eJcv3kfzk");
  var items = form.getItems();
  
  // 清空原有下拉选项(为删除关联页面做准备)
  var multipleChoices = [];
  for (let i = 1; i < qvals.length; i++){
    multipleChoices.push(qvals[i][0] + " " + qvals[i][1]);
  }
  
  var formList = FormApp.ItemType.LIST;
  var formItems = form.getItems(formList);
  // 转换为ListItem类型并保存到item变量
  var item = formItems[0].asListItem();
  item.setChoiceValues(multipleChoices);
  
  Logger.log("当前操作的项类型:" + item.getType());
  Logger.log("当前操作的项标题:" + item.getTitle());
  
  // 删除第9项之后的所有条目
  for (let i = items.length - 1; i > 9; i--){
    form.deleteItem(i);
  }
  
  var choices = [];
  // 创建新页面并关联下拉选项
  for (let i = 1; i < qvals.length; i++ ){
    var pgTitle = qvals[i][0] + " " + qvals[i][1];
    var pgBreakItem = form.addPageBreakItem()
      .setTitle(pgTitle)
      .setGoToPage(FormApp.PageNavigationType.SUBMIT);
    
    Logger.log("页面分隔符类型:" + pgBreakItem.getType());
    Logger.log("页面分隔符标题:" + pgBreakItem.getTitle());
    Logger.log("选项标签:" + pgTitle);
    
    // 现在item是ListItem类型,可以调用createChoice方法
    choices.push(item.createChoice(pgTitle, pgBreakItem));
  }
  
  // 更新下拉选项
  item.setChoices(choices);
}

关键修复点

  • 类型转换:将formItems[0]改为formItems[0].asListItem(),确保item是ListItem实例,拥有createChoice和setChoices等专属方法
  • 变量统一:后续操作直接使用转换后的item,避免混用基础Item类型和ListItem类型
  • 代码规范:添加分号、使用let替代var(更符合现代JS规范),提升代码可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:45:32