Как сгенерировать uuid в гугл листе?

Как сгенерировать uuid в google sheet (например, ccb8a660-91c9-a556-58e0-4fa7-229516872004).

Либо с макросом? или формула? Я не нашел решение в справке Google.

Мерси Дом

7 ответов

Решение

Вы можете генерировать UUID, используя Utilities.getUuid(), Но для достижения того, что вы хотите, нужно использовать пользовательскую функцию, потому что в функциях Spreadsheet для нее нет функций. Чтобы сгенерировать UUID, выполните следующий поток.

  1. Откройте редактор скриптов для создания скрипта Google Apps.
  2. Скопируйте и вставьте следующий скрипт и сохраните его.
  3. Положил =uuid() к клетке в листе.

Таким образом, вы можете получить UUID.

Сценарий:

function uuid() {
  return Utilities.getUuid();
}

Ссылка:

Если я неправильно понимаю ваш вопрос, извините.

Формула thinkyfish исправлена ​​на основе ответа broofa на странице Как создать GUID / UUID

      =CONCATENATE(MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-",MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-4",MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-",MID("89ab",RANDBETWEEN(1,4),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-",MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1))

Соответствие UUID версии 4.

созданный uuid изменяется со временем.

Я думаю, что эта проблема не может быть решена без использования скрипта приложений.
Например:

var sheet = SpreadsheetApp.getActiveSheet();
var values = sheet.getRange('A1:A10').getValues();

for (var i = 0; i < values.length; i++) {
  // When a cell is empty, set a uuid to the cell.
  if (!values[i][0]) {
    sheet.getRange('A' + (1 + i)).setValue(Utilities.getUuid());
  }
}

Я попытался создать функцию чистого листа, которая создает полный uuid только с кодом листа, и это то, что у меня получилось, это довольно глупо, но, похоже, оно работает. Он будет повторно генерироваться каждый раз при обновлении листа, поэтому это может быть бесполезно, но я все равно хотел опубликовать его, потому что не было доступной реализации чистого листа.

      =CONCATENATE(MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-",MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-",MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-",MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),"-",MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1),MID("0123456789abcdef",RANDBETWEEN(1,16),1))

Спасибо за все подробности в этой теме. В итоге я создал макрос, который заполнит все выбранные ячейки в диапазоне, каждая из которых имеет свой собственный UUID. Я использую этот подход, чтобы установить значение в выбранных ячейках и не беспокоиться о "перезаписи" их. Я могу использовать Protect Range, чтобы избежать непреднамеренного обновления ячеек.

В этом скрипте есть 2 проверки:

  1. выбранный диапазон должен охватывать только один столбец
  2. все выбранные ячейки должны быть пустыми (т. е. ни одна из выбранных ячеек не может иметь значения)

Если соблюдены два вышеуказанных ограничения, каждая ячейка заполняется значением. Вот код макроса:

      function fillSelectedWithUUIDs() {
  let curSheet = SpreadsheetApp.getActiveSheet();
  let curSelection = curSheet.getSelection();
  let curRange = curSelection.getActiveRange();

  let ui = SpreadsheetApp.getUi();

  if (curRange.getNumColumns() !== 1) {
    ui.alert(`Range must only contain one column.`);
    return;
  }

  for (let i = 0; i < curRange.getNumRows(); i++) {
    let curCell = curRange.getCell(1 + i, 1);
    if (curCell.getValue() !== "") {
      ui.alert(`ERROR: Cannot overwrite value in cell (${curCell.getA1Notation()})`);
      return;
    }
  }

  for (let i = 0; i < curRange.getNumRows(); i++) {
    curRange.getCell(1 + i, 1).setValue(Utilities.getUuid())
  }

  ui.alert(`Added ${curRange.getNumRows()} UUIDs`);
}

Надеюсь, это кому-то пригодится!

Определите именованные функции

Имя функции: RANDOM_HEX
Определение формулы:
=LOWER(DEC2HEX(RANDBETWEEN(0, 15)))

Имя функции: RANDOM_HEX_BY_LENGTH
Заполнители аргументов [НЕОБЯЗАТЕЛЬНО]: длина
Определение формулы:
=JOIN("", MAKEARRAY(1, length, LAMBDA(rowIndex, columnsIndex, RANDOM_HEX())))

Имя функции: UUID_V4
Определение формулы:
=JOIN("-", RANDOM_HEX_BY_LENGTH(8), RANDOM_HEX_BY_LENGTH(4), RANDOM_HEX_BY_LENGTH(4), RANDOM_HEX_BY_LENGTH(4), RANDOM_HEX_BY_LENGTH(12))

Или...

=JOIN("-", JOIN("", MAKEARRAY(1, 8, LAMBDA(rowIndex, columnsIndex, LOWER(DEC2HEX(RANDBETWEEN(0, 15))))))), JOIN("", MAKEARRAY(1, 4 , LAMBDA(rowIndex, columnsIndex, LOWER(DEC2HEX(RANDBETWEEN(0, 15)))))), JOIN("", MAKEARRAY(1, 4, LAMBDA(rowIndex, columnsIndex, LOWER(DEC2HEX(RANDBETWEEN(0, 15) )))), JOIN("", MAKEARRAY(1, 4, LAMBDA(rowIndex, columnsIndex, LOWER(DEC2HEX(RANDBETWEEN(0, 15)))))), JOIN("", MAKEARRAY(1, 12, LAMBDA(rowIndex, columnsIndex, LOWER(DEC2HEX(RANDBETWEEN(0, 15)))))))

Я рекомендую именованные функции!

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

=RANDBETWEEN(10000000,99999999) & "-" & RANDBETWEEN(1000,9999) & "-" & RANDBETWEEN(1000,9999) & "-" & RANDBETWEEN(1000,9999)& "-" & RANDBETWEEN(1000,9999) & RANDBETWEEN(10000000,99999999)