首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google / Google删除选项脚本

Google / Google删除选项脚本
EN

Stack Overflow用户
提问于 2021-04-22 16:37:51
回答 1查看 211关注 0票数 0

我已经搜索了许多其他的答案,但还没有找到解决办法。我有一个谷歌表单,客户用它每周报名参加志愿者活动。我们填写了一年的所有周,这样客户就可以通过并注册他们感兴趣的各个星期。寻找一个脚本,可以引用链接谷歌表中的答案来更改表单上的问题。

所以如果我们有

  • 4月10日
  • 17
  • 4月24日

在google表单的选项列表中(我们的上限是6人注册),如果4月10日有4人,4月17日有6人,4月24日有1人,脚本将从Google表单中删除4月17日的问题。我在Google页面上有一个计数论坛,用来计算每天注册的总人数,所以这是列表中对应的每一天的单个参考单元格的一个简单范围。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-22 19:22:06

脚本应该如下所示:

代码:

代码语言:javascript
复制
var ssID = '1kmVW8fbHnRIwcJawPlTJ-hWHNnMuVovtqbsCinTKTKw';
var formID = '1z5kPkGAg9e7K7T5NMKBfa9J9mmx6hNVBBjL5hwPcOOo';
var wsData = SpreadsheetApp.openById(ssID).getSheetByName("data");
var form = FormApp.openById(formID);
var options = ["1 person", "2 person", "3 person", "4 person"];

function main() {
  // get list of responses directly from form instead of sheets
  var formResponses = form.getResponses();
  // get list of date questions
  var dates = wsData.getRange(2, 1, wsData.getLastRow(), 1).getValues().flat().filter(Boolean);
  var counts = {};
  for (var i = 0; i < formResponses.length; i++) {
    var formResponse = formResponses[i];
    var itemResponses = formResponse.getItemResponses();
    for (var j = 0; j < itemResponses.length; j++) {
      var itemResponse = itemResponses[j];
      var question = itemResponse.getItem().getTitle();
      // count only answers for date questions
      if (dates.includes(question)) {
        var answer = parseInt(itemResponse.getResponse().replace(' person',''));
        counts[question] = counts[question] ? counts[question] + answer : answer;
      }
    }
  }
  // get list of questions
  var items = form.getItems();
  var titles = items.map(function (item) {
    return item.getTitle();
  });

  dates = dates.forEach(function (date, index){
    // get position of each date question
    var pos = titles.indexOf(date)
    if (pos !== -1) {
      // get id
      var item = items[pos];
      var itemID = item.getId();
      var item = form.getItemById(itemID);
      // count remaining slots
      var slots = 6 - counts[date];
      // if all slots are already used, remove question
      if(slots == 0) {
        form.deleteItem(item);
      }
      else {
        // set new options up to remaining slots
        var newOptions = options.slice(0, slots);
        item.asListItem().setChoiceValues(newOptions);
      }
      // assign slots used in sheets
      wsData.getRange(index + 2, 2).setValue(counts[date]);
    }
  });
}

数据表:

表格:

注意:

确保为函数main

  • What安装onFormSubmit触发器--当表单被填充和提交时,它将触发此function.

  • Every表单提交一次,避免使用“提交另一个响应”,因为它将使用未更新的表单。

  • --使用getResponses读取响应,而不是读取响应表

  • --如果没有剩余的槽

f 217,将删除该项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67217412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档