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

Google apps script 表单中的变量下拉列表在其源范围更改后不接受输入,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我们有一个电子表格,跟踪多人共享的代理。我有一个按团队筛选代理的下拉列表,这样经理们可以更容易地看到他们的团队。我有一个表格链接到该电子表格,其中有一个下拉列表,可根据该过滤器进行更新。因此,当用户选择他们的团队时,他们可以打开表单,只在表单上看到他们的团队,就像在电子表格上一样 表单打开后,下拉菜单设置正确,即使其他用户随后更改了过滤器。问题在于,当第一个用户提交表单时,如果过滤器已更改,则“代理”字段将返回空白。我的猜测是表单正在进行某种隐藏验证,因为第一个表单的条目不再匹配过滤列表,所以它

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

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

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

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

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

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

示例表:

函数updateQuestions(){
//调用表单并连接到下拉项
var form=FormApp.openById(“1zCelOeCuLDGNCgEILS1VBTAuCR4KPKfXYoNnPmGT2uc”);
var namesList=form.getItemById(“1310627039”).asListItem();
//标识数据所在的工作表以填充下拉列表
var ss=SpreadsheetApp.getActive();
变量名称=ss.getSheetByName(“Sheet1”)
//使用3获取工作表第1列中的值以跳过标题行
var namesValues=names.getRange(3,1,names.getMaxRows()-1.getValues();
var agentNames=[];
//转换数组时忽略空单元格
对于(var i=0;i

编辑:包含样本表和代码

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

这很奇怪,因为我在谷歌的文档中找不到这方面的任何记录(也就是说,在谷歌的后端,针对其“原始”状态的表单验证)。我会说,尝试使用应用程序脚本从工作表中提取值-但考虑到这些是表单验证问题,您可能仍然会遇到相同的问题

对您来说,最好的解决办法可能是创建多个表单(可以通过编程来减少工作量),然后让您的带有下拉菜单的工作表调出表单URL,而不是整个“将更改推送到表单”设置。

“如果需要,我可以包含用于更新表单的脚本。”。请吧。添加一个示例表也会有所帮助。
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);
}