google-apps-script - 如果长时间不使用,Google 表单脚本会在输入电子表格之前执行
问题描述
提交谷歌表单并将条目提交到电子表格后,我想进一步为条目添加一个随机的 10 位代码。我在脚本编辑器中编写了这个脚本:
function onFormSubmit(e) {
var random = Math.floor((Math.random() * 10000000000));
var lock = LockService.getPublicLock();
lock.waitLock(30000);
var sheet = SpreadsheetApp.openById('******************************').getSheetByName('testing (Responses)');
var range = sheet.getRange(sheet.getLastRow(),3);
range.setValue(random);
lock.releaseLock();
}
当我提交表单时,这非常有效。但是如果我几个小时不使用表格,然后提交表格,这个脚本会在输入到电子表格之前执行,因此这里的随机代码替换了之前输入的随机代码。最终,当输入电子表格时,这个随机代码的单元格是空的。这很奇怪,因为只有在几个小时内没有提交表单时才会发生这种情况,但如果我尽快再次提交,效果会很好。
解决方案
尝试修改你的东西是这样的:
var SHEET_ID = '******************************'
function onFormSubmit(e) {
var random = Math.floor((Math.random() * 10000000000));
var sheet = SpreadsheetApp.openById().getSheetByName('testing (Responses)');
var range = sheet.getRange(sheet.getLastRow(),3);
// Iterate throw all the rows
for (var i = 2; i <= sheet.getLastRow(); i++) {
random = Math.floor((Math.random() * 10000000000));
// If the random number is not present, then set one. Otherwise skip
if (sheet.getRange(i, 3).getValue() == "") {
sheet.getRange(i, 3).setValue(random);
}
}
}
推荐阅读
- android - 使用导航 UI 组件在片段之间传递数据
- javascript - 在导入的函数/方式上使用 eval
- php - PHP isset 函数无法打印数据
- c# - 使用 Xamarin 和 SignalR 时连接被拒绝
- php - Auth guard[] 未定义
- javascript - 滚动时反应计数
- c# - 检查文件的编码是 C# 中的 Shift-JIS (Encoding.GetEncoding(932))
- php - 如何从数组中删除只有一个索引的不必要数组?
- python - 如何从python中的函数计算梯度 - 元组IndexError?
- python - 导入csv时如何跳过行?