Google apps script OneEdit脚本自动递增单元格-如果用户同时勾选复选框,则冲突不大

Google apps script OneEdit脚本自动递增单元格-如果用户同时勾选复选框,则冲突不大,google-apps-script,google-sheets,Google Apps Script,Google Sheets,作为使用Arrayformula的替代方法,我有以下基本上自动递增的脚本 用于生成唯一ID的特定列中的单元格 我面临的唯一问题是,如果两个用户在同一个精确时间勾选复选框(我自己尝试过,甚至有半秒的延迟),它会给他们相同的ID,这对于下一个任务来说是一个问题 有什么诀窍(或替代方法)可以绕过这个小问题吗?目前,我只是使用条件格式来突出显示ID的任何副本,以帮助用户(即,如果用户看到红色的ID,他将其删除,然后再次勾选复选框以获取新ID) 多谢各位 脚本: function onEdit(e) {

作为使用Arrayformula的替代方法,我有以下基本上自动递增的脚本 用于生成唯一ID的特定列中的单元格

我面临的唯一问题是,如果两个用户在同一个精确时间勾选复选框(我自己尝试过,甚至有半秒的延迟),它会给他们相同的ID,这对于下一个任务来说是一个问题

有什么诀窍(或替代方法)可以绕过这个小问题吗?目前,我只是使用条件格式来突出显示ID的任何副本,以帮助用户(即,如果用户看到红色的ID,他将其删除,然后再次勾选复选框以获取新ID)

多谢各位

脚本:

function onEdit(e) {
  var watchColumns = [1]; //when checkbox is ticked, auto-numbering will be triggered
  var autoColumn = 3;
  var headerRows = 1;
  var watchSheet = "Sheet1";

  var range = e.range;
  var sheet = range.getSheet();
  if (e.value !== undefined && sheet.getName() == watchSheet) {
    if (watchColumns.indexOf(range.getColumn()) > -1) {
      var row = range.getRow();
      if (row > headerRows) {
        var autoCell = sheet.getRange(row, autoColumn);
        if (!autoCell.getValue()) {
          var data = sheet.getDataRange().getValues();
          var temp = 1;
          for (var i = headerRows, length = data.length; i < length; i++)
            if (data[i][autoColumn - 1] > temp)
              temp = data[i][autoColumn - 1];
          autoCell.setValue(temp + 1);
        }
      }
    }
  }
}
函数onEdit(e){
var watchColumns=[1];//勾选复选框时,将触发自动编号
var自列=3;
var headerRows=1;
var watchSheet=“Sheet1”;
var范围=e范围;
var sheet=range.getSheet();
if(e.value!==未定义和&sheet.getName()==监视表){
if(watchColumns.indexOf(range.getColumn())>-1){
var row=range.getRow();
如果(行>头行){
var autoCell=sheet.getRange(行,自动列);
如果(!autoCell.getValue()){
var data=sheet.getDataRange().getValues();
var-temp=1;
对于(var i=headerRows,length=data.length;itemp)
温度=数据[i][autoColumn-1];
自动电池设置值(温度+1);
}
}
}
}
}

用于防止当前文档的任何用户同时运行一段代码。

谢谢您的建议,我已经尝试了类似的
函数testWait(){var lock=LockService.getScriptLock();lock.waitLock(50000);SpreadsheetApp.flush();lock.releaseLock();}
但没有太大成功。有什么指引吗?@Nabnub-See