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

Google Sheets脚本问题:如何移除多选框空白选项,仅显示未关闭工单

问题描述

我正在为Google Sheets编写脚本,需求是仅当工单处于“Open(未关闭)”状态时,在表单的Multiple Choice(多选框)中显示对应选项,工单关闭时则不显示该选项。但运行脚本后,关闭工单的选项确实不显示了,却出现了一个空白可选选项,想知道怎么移除这个空白选项。

相关代码

function updateForm() {
    var formId="formid";
    var form = FormApp.openById(formId);
    var ss = SpreadsheetApp.getActive();
    var tickedID = form.getItemById("779001018").asMultipleChoiceItem();
    var tickets = ss.getSheetByName("Form Responses 1");
    var theTickets = tickets.getRange(2,1, 
    tickets.getLastRow(),9).getValues();
    var TicketArray = [];
    var ticketLength = theTickets.length;
    for(var i = 0; i < ticketLength; i++){ 
        if(theTickets[i][2] ==="Open"){      
            var text = String(theTickets[i][0] + " - "+ theTickets[i][5]);
            TicketArray[i] = TicketArray.push(text);
            tickedID.setChoiceValues(TicketArray);
        }else{
            TicketArray[i] = theTickets[i][0] + 'XXX';
            TicketArray.pop();
        }
    }
}
解决方案

你的代码存在两处核心问题,直接导致了空白选项的出现:

  1. 数组赋值逻辑错误:TicketArray[i] = TicketArray.push(text) 是错误用法——push()方法返回的是数组新长度,而非添加的元素,这会让数组中混入数字值,后续处理时产生空白。
  2. 循环内的无效操作与重复更新:else分支里的数组赋值+pop()逻辑混乱,且循环内每次都调用tickedID.setChoiceValues(TicketArray),会把中间错误状态的数组同步到表单。

修改后的代码如下:

function updateForm() {
    var formId = "formid";
    var form = FormApp.openById(formId);
    var ss = SpreadsheetApp.getActive();
    var tickedID = form.getItemById("779001018").asMultipleChoiceItem();
    var tickets = ss.getSheetByName("Form Responses 1");
    // 修正数据范围:总行数减1(排除表头行),避免读取空行
    var theTickets = tickets.getRange(2, 1, tickets.getLastRow() - 1, 9).getValues();
    var TicketArray = [];
    
    for(var i = 0; i < theTickets.length; i++){ 
        if(theTickets[i][2] === "Open"){      
            var text = String(theTickets[i][0] + " - " + theTickets[i][5]);
            TicketArray.push(text); // 直接添加元素,无需赋值给数组索引
        }
        // 关闭工单直接跳过,无需额外操作
    }
    
    // 循环结束后统一更新表单选项,避免中间错误状态
    tickedID.setChoiceValues(TicketArray);
}

关键修改说明:

  • 修正数据读取范围,避免把空行数据纳入处理
  • 删除错误的数组赋值逻辑,直接用push()添加有效选项
  • 移除逻辑混乱的else分支,关闭工单直接跳过即可
  • 将表单选项更新操作移到循环外,确保用最终的纯净数组更新选项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:53:22