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(); } } }
解决方案
你的代码存在两处核心问题,直接导致了空白选项的出现:
- 数组赋值逻辑错误:
TicketArray[i] = TicketArray.push(text)是错误用法——push()方法返回的是数组新长度,而非添加的元素,这会让数组中混入数字值,后续处理时产生空白。 - 循环内的无效操作与重复更新: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
相关产品推荐
相关产品推荐

