首页 > 解决方案 > 谷歌表单 - 向提交添加唯一标识符 - 不使用数组公式

问题描述

我之前使用数组公式为新的表单提交分配一个唯一的 ID;但是有 27 列和超过 5000 行数据,运行数组公式的成本会干扰我的 onformsubmit 向阻止它发送电子邮件的人的子集发送自定义电子邮件。

我正在尝试分配值“Txxxxxx”,其中 xxxxxx 是第 22 列中提交的下一个编号,即 T05000 或 T00100

我不知道如何编写代码来做到这一点,有人有什么想法吗?我是否必须通过 onformsubmit 触发它?这会干扰我已经必须发送电子邮件的 onformsubmit 吗?

要添加唯一 ID 的列的示例位置

标签: google-apps-scriptgoogle-sheetsgoogle-forms

解决方案


我相信你的目标如下。

  • 您想在提交 Google 表单时放置一个计数器值。
  • 在您的情况下,计数器值被放入“V”列,格式类似于T001216and T001217
    • 当前面的计数器为T001217时,当提交 Google 表单时,您希望将 的值放入T001218提交行的“V”列。

在这种情况下,我想提出以下示例脚本。在这个示例脚本中,使用了autoFillin Class Range 的方法。

示例脚本:

请将以下脚本复制并粘贴到该值从 Google 表单提交的 Google 电子表格的容器绑定脚本中。并且请将 OnSubmit 触发器安装到onSubmit. 这样,当提交 Google 表单时,值 likeT01218将添加到“V”列。

function onSubmit(e) {
  const initialValue = "T001216"; // This is the initial value at the row 2.
  const counterColumn = 22; // 22 is the column "V".

  const range = e.range;
  const sheet = range.getSheet();
  if (range.rowStart == 2) {
    sheet.getRange(2, counterColumn).setValue(initialValue);
    return;
  }
  const previousRange = sheet.getRange(2, counterColumn, range.rowStart - 2);
  previousRange.autoFill(previousRange.offset(0, 0, range.rowStart - 1), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
}
  • 在此示例脚本中,当提交 Google 表单的第一个值时,将 的值initialValue用作初始值。在此示例脚本中,使用 的值T001216是因为您的示例图像。

笔记:

  • 当提交 Google 表单时,此示例脚本由可安装的 OnSubmite 触发器运行。所以,当你直接运行onSubmit脚本编辑器的功能时,就会出现类似的错误TypeError: Cannot read property 'range' of undefined。请注意这一点。

参考:


推荐阅读