Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 从google表单下拉列表中删除所选项目_Google Apps Script_Google Sheets_Google Drive Api_Google Forms - Fatal编程技术网

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,他们可以各有一个,并向他们发送一个指向我创建的谷歌表单的链接。汤姆很快,第一个打开表格。他输入自己的名字并从三项下拉列表中选择一个梳子。迪克打开表单链接,在同一个下拉式问题中,他从剩下的两个项目中进行选择。他选择画笔。哈利有点迟钝,所

几天来我一直在努力让它发挥作用,现在我放弃了

我想创建一个谷歌表单,用下拉列表填充一个电子表格。我不想让任何人选择和其他人一样的东西。(就像在家常便饭的情况下)

例如:

  • 我在送礼:
    • 梳子
    • 刷子
    • 装满糊状物的碗
我告诉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); 
  }
}