我有一个新的谷歌应用脚本项目,其中包括一个表单(不是 Google 表单),允许用户输入数据。数据将被提交并插入到谷歌电子表格中。
我想给每个用户一个唯一的 ID,这个 ID 是最后一行 +1。我尝试了一些代码,比如以下代码:
function submitData(data){
var user_id = sheet.getLastRow();
sheet.appendRow([user_id, data.name, data.email]);
return user_id;
}
问题在于当两个用户同时提交表单时,他们将得到相同的用户ID。我认为可能的原因是,他们在其中一个调用
appendRow()
之前都调用了getLastRow()
。我尝试使用
LockService
,但新行会覆盖旧行:var COLUMN_USER_ID = 1;
var COLUMN_NAME = 2;
var COLUMN_EMAIL = 3;
function submitData(data){
var lock = LockService.getPublicLock();
if (lock.tryLock(10000)) {
var newRow = sheet.getLastRow() + 1;
var user_id = newRow - 1;
sheet.getRange(newRow, COLUMN_USER_ID).setValue(user_id);
sheet.getRange(newRow, COLUMN_NAME).setValue(data.name);
sheet.getRange(newRow, COLUMN_EMAIL).setValue(data.email);
lock.releaseLock();
return user_id;
} else {
return "Lock Timeout";
}
}
似乎即使调用了
setValue()
,getLastRow()
仍然返回插入值之前的旧值。我猜测这是因为这是一个异步调用吗?非常感谢!