首页 > 解决方案 > 根据 Google 表格中的单元格更改表单上的问题

问题描述

对编码完全陌生,我正在自学。对我迄今为止所取得的成就感到非常高兴,现在想突破我的学习界限!

所以背景 - 我组织青年足球锦标赛。团队通过谷歌表格进入比赛。该表格进入一个谷歌表格,然后我使用公式来确保我可以看到每个年龄组有多少团队进入。每个年龄组在比赛中都有最大数量的球队。实时表单的链接是https://forms.gle/8VoBddM8AAJMFXqM7

我想做的事

目前,当年龄组接近满时,我必须手动编辑表格。例如,俱乐部最多可以进入两支球队。当只剩下一个空间时,我目前必须手动删除进入 2 队的选项,以确保可以进入 1 队。这有时会导致我无法做到足够快,即使只有 1 个可用空间,也会进入 2 个团队。所以这一切变得有点混乱

那么 - 是否有代码当工作表中的单元格等于特定数字时,谷歌表单会自动删除输入 2 个团队的选项,所以我没有这个问题?

第二.......

当一个年龄组已满时,我必须手动编辑表格,将该年龄组的任何未来条目引导到表格的不同部分,以便团队填写预备名单表格。像上面一样,我有时不能足够快地做到这一点。那么,是否有任何代码可以根据工作表中单元格的值自动将用户引导到表单的不同部分?

所以总而言之

我需要做的一件事是根据工作表中的单元格值自动删除表单中的选项。其次,根据工作表中的单元格值自动重定向到表单中的不同部分

我对这一切都很陌生,所以请善待!:)

标签: google-sheetsgoogle-forms

解决方案


您希望根据表单提交中产生的某些值对表单进行更改。该答案确实试图解决表单更改(并非最不重要的原因是表单的结构未知),但侧重于识别阈值事件,这些事件将引发修改表单的脚本。

门槛

您想确定提交新表单后“剩余名额”为 1 或 0 的年龄组。

考虑到可能有很多方法可以做到这一点,这个脚本是一种方法。

关键要素

  • 该功能必须安装为onFormSubmit
  • 实际的表单提交似乎并不重要(尽管这可能会随着脚本的进一步增强而改变)
  • 从概览中检索到的数据包括 B->F 列,因为一旦对值(F 列)进行评估,就必须确定相关的年龄组(B 列)
  • 循环、IF 语句和记录器语句用于识别已达到阈值的实例 - 这是最简单的方法;其他方法,例如indexOf和/或switch可用于识别阈值和产生的动作。
  • 请注意,将返回所有阈值实例;结果不限于最新表单响应生成的特定实例。如有必要,可能/可能会这样做。

function so6047592901() {

  // sample of onFormSubmit to check 

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var overview = ss.getSheetByName("Overview");


  // get the data
  var startRow=3
  var startCol=2
  var rows = 19
  var cols = 5
  var data =  overview.getRange(startRow, startCol, rows, cols);
  //Logger.log("DEBUG: data range = "+data.getA1Notation());
  var values = data.getValues();
  //Logger.log("DEBUG: number values = "+values)


  // test for places left = 1
  var test1left = "1";
  // test for places left = 0
  var test0left = "0";

  for (var i=0;i<values.length;i++){
    // test for the Age Group
     var ageGrp = values[i][0]
    if (values[i][4] == test1left) {
      Logger.log("DEBUG: Places Left = "+values[i][4]+", i:"+i+" , Age group is "+ageGrp);
    }
    if (values[i][4] == test0left){
      Logger.log("DEBUG: Places Left = "+values[i][4]+", i:"+i+" , Age group is "+ageGrp);
    }
  }
}

推荐阅读