Сценарий OnEdit для автоматического увеличения ячеек - небольшой конфликт, если пользователи одновременно устанавливают флажок - PullRequest
0 голосов
/ 08 мая 2020

В качестве альтернативы использованию Arrayformula у меня есть следующий сценарий, который в основном автоматически увеличивает ячейки в определенном столбце c для создания уникального идентификатора

Единственная проблема, с которой я сталкиваюсь, это что, если 2 пользователя установят флажок в одно и то же время (что я пробовал сам даже с задержкой в ​​полсекунды), он дает им одинаковый идентификатор, что является проблемой для следующей задачи.

Есть ли какие-либо уловка (или альтернативный подход), чтобы обойти эту небольшую проблему? На данный момент я просто использую условное форматирование, чтобы выделить любые дубликаты идентификаторов, чтобы помочь пользователям (т.е. если пользователь видит идентификатор красным, он удаляет его, а затем снова ставит флажок, чтобы получить новый идентификатор)

Спасибо.

СКРИПТ:

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);
        }
      }
    }
  }
}

1 Ответ

1 голос
/ 08 мая 2020

Используйте documentLock, чтобы запретить любому пользователю текущего документа одновременно запускать часть кода.

...