当前位置: 首页 > 知识库问答 >
问题:

基于谷歌表单中的单元格更改表单上的问题

张智
2023-03-14

对编码完全陌生,我一直在自学。我对自己迄今为止所取得的成就感到非常高兴,现在我想拓展我的学习领域!

所以我组织青少年足球比赛。球队通过谷歌表格进入比赛。表格进入谷歌表格,然后我使用公式确保我可以看到每个年龄组有多少队参赛。每个年龄组在锦标赛中可以拥有最多数量的球队。指向活动窗体的链接是https://forms.gle/8VoBddM8AAJMFXqM7

我想做的事

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

那么-有没有代码,当工作表中的一个单元格等于一个特定的数字时,google表单会自动删除输入2个团队的选项,这样我就不会有这个问题?

其次

当某个年龄组已满时,我必须手动编辑表格,将该年龄组未来的任何条目引导到表格的不同部分,以便团队填写后备名单表格。就像上面所说的,我有时做得不够快。那么,是否有任何代码可以用于根据表单中单元格的值自动将用户引导到表单的不同部分?

总而言之

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

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

共有2个答案

华旭
2023-03-14

例如,让我们假设我有5个点可供前5个人使用我的表格来申请。在所有可用的点都被认领后,我想从表单中删除“认领点”项。我可以通过在每次有人提交响应时运行检查功能来实现这一点。

  1. 从响应电子表格创建绑定脚本
function spotsAvailable(ss) {
    var maxSpots = 5;

    // Get response sheet.
    var sheet = ss.getSheetByName("Form Responses 1");
    var lastRow = sheet.getDataRange().getLastRow();

    // Count the spots claimed
    var a1Notation = "B2:B" + lastRow;
    var claims = 0;
    ss.getRange(a1Notation).getValues().forEach(
        (claim) => {
            if (claim == "Yes") {
                claims++
            }
            return claims
        });
    // Return true if there are available spots, else false
    if (claims < maxSpots) {
        return true;
    }
    return false;

}
js prettyprint-override">function changeForm() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var form = FormApp.getActiveForm();

    if (spotsAvailable(ss) == false) {
        // If no more spots remove claim spot item from form
        var items = form.getItems();
        // Item index one (1) is our multiple selection question
        // You can get items by id, or by index.
        form.deleteItem(1);
    }

}

请注意,这只是一个示例,根据您的特殊需要,您可以使用应用程序脚本服务中的任何可用方法,如下所述。。。

推荐阅读:

  • 应用程序脚本表单服务
令狐良骏
2023-03-14

您希望根据表单提交中产生的某些值对表单进行更改。这个答案确实试图解决表单更改问题(至少是因为表单结构未知),但重点是识别将导致脚本修改表单的阈值事件。

门槛

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

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

关键要素

  • 该功能必须作为onFormSubmit
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);
    }
  }
}
 类似资料:
  • 谷歌电子表格中有一个项目列表,我们需要链接谷歌硬盘上另一个文件夹中的一组文件。链接的功能如下所示: 我们遇到的问题是,如果文件夹的内容与列表的顺序不完全匹配,则文件到行项目的顺序将不同步。如果同一行中另一个单元格的内容与文件名中的内容匹配,我们希望某些文件超链接到工作表中的某些单元格。我们希望避免为每个行项目手动创建链接。这在谷歌表单中是可能的吗?

  • 我正试图让一个Google表单根据1个表单输入的数据,用多行填充电子表格,如下所示: 表单简单,客户信息最少https://docs.google.com/forms/d/1LrKlVuI7kxVU0lxz70Uu-2Obj4x3qIwe6nS-ErzbCAg/ 输入后,我需要表格在表格(或格式化表格)中输入数据,如下所示:-输入的每个部分(1、2或3)应位于单独的行中,具有相同的客户名称 然后,

  • 我有一个电子表格,记录了几个月的旧账户。有没有办法让Google Sheets在每个月的1号自动更新一个单元格? VG:一个账户有78个月的历史,在9月1日它就有79个月了。我想在本月1日自动更新它,这样我就不必在每个帐户年龄单元中手动添加1。

  • 我有一个正在写的剧本,需要一些帮助。 首先,我的脚本应该如何工作。 脚本:用户填写谷歌表单并点击提交。提交后,我的脚本运行并从google工作表中读取我在工作表中操作的一系列数据单元。然后将数据单元格格式化为字符串,并在表单的确认消息中提示。 现在问题来了。 问题:当我提交我对表格的回复时,从表格到表格的一切都很好。当我手动运行代码时,代码工作正常。当我提交表单响应时,事件历史记录会显示触发器并说

  • 我想创建一个动态谷歌表单的边栏,理想情况下是从(谷歌)地图中选择要输入表单的坐标。 从文档和试用版中,我可以创建表单编辑器/设计器的侧栏(https://docs.google.com/forms/d/ID/edit),而不是活的形式本身(https://docs.google.com/forms/d/ID/viewform).表单对于文档和工作表应用程序是不同的,存在这两种视图。 例如: 第一个

  • 我在谷歌新表单中遇到一些奇怪的保护问题。我已经创建了一个我正在经历的演示。工作表的URL为: https://docs.google.com/spreadsheets/d/1IbAiqU6oN48Ql_wM3TeRl9TqG6DFsBKtc86jElv0Kbo/edit?usp=sharing 我已使用“数据保护的工作表和范围…”下的“除某些单元格外的工作表保护”方法,仅为所有者编辑工作表,第5行