google-apps-script - 谷歌表单 - 向提交添加唯一标识符 - 不使用数组公式
问题描述
我之前使用数组公式为新的表单提交分配一个唯一的 ID;但是有 27 列和超过 5000 行数据,运行数组公式的成本会干扰我的 onformsubmit 向阻止它发送电子邮件的人的子集发送自定义电子邮件。
我正在尝试分配值“Txxxxxx”,其中 xxxxxx 是第 22 列中提交的下一个编号,即 T05000 或 T00100
我不知道如何编写代码来做到这一点,有人有什么想法吗?我是否必须通过 onformsubmit 触发它?这会干扰我已经必须发送电子邮件的 onformsubmit 吗?
解决方案
我相信你的目标如下。
- 您想在提交 Google 表单时放置一个计数器值。
- 在您的情况下,计数器值被放入“V”列,格式类似于
T001216
andT001217
。- 当前面的计数器为
T001217
时,当提交 Google 表单时,您希望将 的值放入T001218
提交行的“V”列。
- 当前面的计数器为
在这种情况下,我想提出以下示例脚本。在这个示例脚本中,使用了autoFill
in 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
。请注意这一点。
参考:
推荐阅读
- docker - 是否可以在远程主机上外部运行 gitlab 的 docker 注册表?
- scala - 在信息进入控制器之前转换为小写用户名
- java - 解密视频文件并保存到内部存储
- autocomplete - 仅对选项卡自动完成并输入
- sql - 如何将值插入到 SQL Server 中的联结/链接表中?
- php - 在 laravel 中更新关系
- semantic-versioning - semver:匹配预发布后缀 (3.* =/= 3.4.5-1)
- hibernate - Hibernate过滤SpringBoot中的关联实体
- python - 如何使用 NLP 获取句子的含义?
- angular5 - 使用 css 类选择器在角度组件上传递输入属性