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

如何实现Google Forms图书借还系统的选项自动跨列表迁移?

Google Forms图书馆借还系统:实现选项在借还列表间自动转移

你的代码存在循环变量重复使用、表单项定位错误、switch逻辑混乱等问题,下面是修正后的完整实现方案:

核心需求梳理

  • 用户选择「Check Out?」中的选项后,该选项从「Check Out?」列表移除,添加到「Check In?」列表
  • 用户选择「Check In?」中的选项后,该选项从「Check In?」列表移除,添加到「Check Out?」列表

修正后的代码

function updateLibraryForm(e) {
  // 通过提交事件获取本次提交的响应,无需遍历所有历史记录
  var formResponse = e.response;
  var itemResponses = formResponse.getItemResponses();
  
  // 获取表单中的两个下拉列表项
  var checkOutItem = getFormItemByTitle("Check Out?");
  var checkInItem = getFormItemByTitle("Check In?");
  
  // 遍历本次提交的所有选项响应
  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    var itemTitle = itemResponse.getItem().getTitle();
    var selectedValue = itemResponse.getResponse();
    
    switch(itemTitle) {
      case "Check Out?":
        // 从借出列表移除,添加到归还列表
        updateDropdownOptions(checkOutItem, checkInItem, selectedValue);
        break;
      case "Check In?":
        // 从归还列表移除,添加到借出列表
        updateDropdownOptions(checkInItem, checkOutItem, selectedValue);
        break;
    }
  }
}

// 根据标题查找表单下拉项的辅助函数
function getFormItemByTitle(title) {
  var form = FormApp.getActiveForm();
  var items = form.getItems(FormApp.ItemType.LIST);
  for (var i = 0; i < items.length; i++) {
    if (items[i].getTitle() === title) {
      return items[i].asListItem();
    }
  }
  return null;
}

// 更新下拉列表选项的核心函数:从源列表移除选项,添加到目标列表
function updateDropdownOptions(sourceItem, targetItem, value) {
  // 过滤源列表,移除选中的选项
  var sourceChoices = sourceItem.getChoices();
  var newSourceChoices = sourceChoices.filter(choice => choice.getValue() !== value);
  
  // 向目标列表添加新选项
  var targetChoices = targetItem.getChoices();
  targetChoices.push(targetItem.createChoice(value));
  
  // 更新两个列表的选项
  sourceItem.setChoices(newSourceChoices);
  targetItem.setChoices(targetChoices);
}

关键说明

  1. 使用提交事件对象:通过e.response直接获取本次提交的响应,避免遍历所有历史响应,提升效率
  2. 逻辑拆分封装:把查找表单项、更新选项的逻辑拆成独立函数,代码更易维护
  3. 正确操作列表选项:通过getChoices()获取现有选项,过滤后用setChoices()更新,替代原代码的错误操作
  4. 触发设置:必须将函数设置为「表单提交」触发,手动运行会因e参数为空报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:37:18