表单中的变量下拉列表在其源范围更改后不接受输入



我们有一个电子表格,用于跟踪多人共享的代理。我有一个下拉列表,可以按团队筛选代理,这样经理就可以更容易地看到他们的团队。我有一个链接到该电子表格的表单,其中有一个基于该过滤器更新的下拉列表。因此,当用户选择他们的团队时,他们可以打开表格,只在表格上看到他们的团队,就像在电子表格上一样。

打开表单后,即使其他用户随后更改了过滤器,也会正确设置下拉菜单。问题是,当第一个用户提交表单时,如果过滤器已更改,则代理字段将返回空白。我的猜测是,表单正在进行某种隐藏验证,由于第一个表单的条目不再与筛选列表匹配,因此它拒绝输入。

示例:用户1选择他们的名称,然后过滤表单以显示代理1、2、3和4。用户1打开表单,其中的下拉列表仅包括代理1、2、3和4。

用户2选择他们的名字,现在过滤表单以显示代理5、6、7和8。用户2打开表单,下拉列表包括代理5、6、7和8。

现在两个用户都提交了他们的表单。用户1的代理字段返回空白,而用户2的代理字段则返回他们的选择。

有什么办法绕过这个验证吗?如果需要,我可以包含用于更新表单的脚本。

示例表:https://docs.google.com/spreadsheets/d/171tcBwXvxo67MguZIowJi53VVk-w0IOuNnujYkx4-qo/edit#gid=0

function updateQuestions() {
// call form and connect to the drop-down item
var form = FormApp.openById("1zCelOeCuLDGNCgEILS1VBTAuCR4KPKfXYoNnPmGT2uc");
var namesList = form.getItemById("1310627039").asListItem();
// identify the sheet where data resides to populate the drop-down
var ss = SpreadsheetApp.getActive();
var names = ss.getSheetByName("Sheet1")
// grab values in the 1st column of the sheet using 3 to skip header rows
var namesValues = names.getRange(3, 1, names.getMaxRows() - 1).getValues();
var agentNames = [];
// convert the array ignoring empty cells
for(var i = 0; i < namesValues.length; i++)
if(namesValues[i][0] != "")
agentNames[i] = namesValues[i][0];
// populate dropdown with array data
namesList.setChoiceValues(agentNames);
}

编辑:包括样品表和代码

因此,经过一番尝试和错误之后,很明显,您对链接表单的更新会触发一些表单验证逻辑,然后从响应中清除您的答案。

这很奇怪,因为我在谷歌的文档中找不到任何这方面的记录(也就是说,根据谷歌后端的"原始"状态进行表单验证(。我想尝试使用Apps脚本从工作表中提取值,但考虑到这些都是表单验证问题,您可能仍然会遇到同样的问题。

对你来说,最好的解决方法可能是创建多个表单(可以通过编程来减少工作量(,然后让你的表单和下拉列表交换表单URL,而不是整个"表单";将更改推送到表单";设置。

最新更新