Google apps script 从google表单下拉列表中删除所选项目
几天来我一直在努力让它发挥作用,现在我放弃了 我想创建一个谷歌表单,用下拉列表填充一个电子表格。我不想让任何人选择和其他人一样的东西。(就像在家常便饭的情况下) 例如:Google apps script 从google表单下拉列表中删除所选项目,google-apps-script,google-sheets,google-drive-api,google-forms,Google Apps Script,Google Sheets,Google Drive Api,Google Forms,几天来我一直在努力让它发挥作用,现在我放弃了 我想创建一个谷歌表单,用下拉列表填充一个电子表格。我不想让任何人选择和其他人一样的东西。(就像在家常便饭的情况下) 例如: 我在送礼: 梳子 刷子 装满糊状物的碗 我告诉Thomas、Richard和Henry,他们可以各有一个,并向他们发送一个指向我创建的谷歌表单的链接。汤姆很快,第一个打开表格。他输入自己的名字并从三项下拉列表中选择一个梳子。迪克打开表单链接,在同一个下拉式问题中,他从剩下的两个项目中进行选择。他选择画笔。哈利有点迟钝,所
- 我在送礼:
- 梳子
- 刷子
- 装满糊状物的碗
根据到目前为止的研究,我需要使用回复电子表格上的if函数来查看是否有对某个项目的接收(查看单元格是否为空)以及VLOOKUP,但我无法清楚地了解如何使其协同工作。
谢谢你,
晚安 编辑: 根据gssi的回答,我想发布代码并描述我的操作方式
函数updateListChoices(项){
var inventory=(电子表格app.openById(TheIDof there响应表)
.getSheetByName(“库存”)
.getDataRange()
.getValues());
所选变量=(SpreadsheetApp.openById(“0Al-3LXunCqgodHB5RGNpR0RyQ0pERmVnek1JeUJKS0E”)
.getSheetByName(“响应”)
.getDataRange()
.getValues());
var选择=[];
var selectedReal=[];
对于(变量i=0;i
在表单的构建中,单击工具
菜单,然后单击脚本编辑器
。将代码从这里复制(根据需要进行更改)到脚本编辑器,然后单击保存。单击资源
菜单并点击项目触发器
(第一个选项)。单击添加触发器。从表单中选择updateList
,
发送时和打开时各执行一次(应以两行结束)
这不是很优雅,但这是我的能力。祝你好运。这里有一个“如何”描述了如何构建电子表格 列A:名为“库存”,包含初始可用项目的名称 B列:单元格B1中名为“索引”的列包含公式
=if(isnumber(匹配(库存,选中,0)),“”,if(行(B1)=1,1,最大值(偏移量(索引,0,0,行(B1)-1,1))+1))
。将B1中的公式复制到B列下的所有单元格中
列C:名为“Selected”,包含当前选定项目的名称,从第1行开始,连续向下
列D:命名为“可用”,单元格D1包含公式<代码>=if(isnumber(匹配(第(D1)行,索引,0)),索引(库存,匹配(第(D1)行,索引,0),1),“”),然后将其复制到列D中其下的所有单元格中
“可用”列将始终包含“尚未选定”库存项目的连续列表 这里有一个“如何”描述了如何构建电子表格 列A:名为“库存”,包含初始可用项目的名称 B列:单元格B1中名为“索引”的列包含公式
=if(isnumber(匹配(库存,选中,0)),“”,if(行(B1)=1,1,最大值(偏移量(索引,0,0,行(B1)-1,1))+1))
。将B1中的公式复制到B列下的所有单元格中
列C:名为“Selected”,包含当前选定项目的名称,从第1行开始,连续向下
列D:命名为“可用”,单元格D1包含公式<代码>=if(isnumber(匹配(第(D1)行,索引,0)),索引(库存,匹配(第(D1)行,索引,0),1),“”),然后将其复制到列D中其下的所有单元格中
“可用”列将始终包含“尚未选定”库存项目的连续列表 这里有一个“如何”描述了如何构建电子表格 列A:名为“库存”,包含初始可用项目的名称 B列:单元格B1中名为“索引”的列包含公式
=if(isnumber(匹配(库存,选中,0)),“”,if(行(B1)=1,1,最大值(偏移量(索引,0,0,行(B1)-1,1))+1))
。将B1中的公式复制到B列下的所有单元格中
列C:名为“Selected”,包含当前选定项目的名称,从第1行开始,连续向下
列D:命名为“可用”,单元格D1包含公式<代码>=if(isnumber(匹配(第(D1)行,索引,0)),索引(库存,匹配(第(D1)行,索引,0),1),“”),然后将其复制到列D中其下的所有单元格中
“可用”列将始终包含“尚未选定”库存项目的连续列表 这里有一个“如何”描述了如何构建电子表格 列A:名为“库存”,包含初始可用项目的名称 B列:单元格B1中名为“索引”的列包含以下公式<代码>=if(isnumber(匹配(库存,选定,0)),“”,if(行(B1)=1,1,最大值(偏移量(索引,0,0
var LIST_DATA = [{title:"Select a product", sheet:"inventory"}];
function updateLists() {
//var form = FormApp.getActiveForm();
var form = FormApp.openById("paste_ID_of_your_FORM_here");
var items = form.getItems();
for (var i = 0; i < items.length; i += 1){
for (var j = 0; j < LIST_DATA.length; j+=1) {
var item = items[i];
if (item.getTitle() === LIST_DATA[0].title){
updateListChoices(item.asMultipleChoiceItem(), LIST_DATA[0].sheet);
break;
}
}
}
}
function updateListChoices(item, sheetName){
var inventory = (SpreadsheetApp.openById("paste_ID_of_your_RESPONSE_SHEET_here")
.getSheetByName("inventory")
.getDataRange()
.getValues());
var selected = (SpreadsheetApp.openById("paste_ID_of_your_RESPONSE_SHEET_here")
.getSheetByName("responses")
.getDataRange()
.getValues());
var choices = [];
var selectedReal = [];
for (var i = 0; i< selected.length; i+=1){
selectedReal.push(selected[i][1])
}
for (var i = 1; i< inventory.length; i+=1){
if(selectedReal.indexOf(inventory[i][0])=== -1){
choices.push(item.createChoice(inventory[i][0]));}
}
if (choices.length < 1) {
var form = FormApp.getActiveForm();
form.setAcceptingResponses(false);
} else {
item.setChoices(choices);
}
}