Как создать uuid в листе Google?

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

Либо с помощью макроса? или формула?


person Dom    schedule 09.07.2018    source источник


Ответы (6)


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

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

По этому вы можете получить UUID.

Сценарий:

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

Ссылка :

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

Добавлен:

Когда используется пользовательская функция, значение изменяется путем автоматического пересчета таблицы. Если вы хотите исправить значение, как насчет этого примера сценария? Считайте это лишь одним из нескольких обходных путей.

Пример сценария:

function onEdit(e) {
  if (e.range.getFormula().toUpperCase()  == "=UUID(TRUE)") {
    e.range.setValue(Utilities.getUuid());
  }
}

function uuid() {
  return Utilities.getUuid();
}
  • When you use this script, please do the following flow.
    1. Copy and paste the script to the bound-script of Spreadsheet and save it.
    2. Put =uuid() to a cell in a sheet.
      • In this case, =uuid() is put as a custom function. So when the Spreadsheet is automatically calculated, the value is changed.
    3. Put =uuid(true) to a cell in a sheet.
      • In this case, =uuid() is put as a value by onEdit(). So even when the Spreadsheet is automatically calculated, the value is NOT changed.

Примечание:

  • В этом случае =uuid(true) можно использовать, когда функция помещается вручную, потому что при этом используется триггер события OnEdit.
  • Это простой пример сценария. Поэтому, пожалуйста, измените это в соответствии с вашей ситуацией.

Ссылка:

person Tanaike    schedule 09.07.2018
comment
@I '-' Благодарю за комментарий. Когда запущен Utilities.getUuid(), результат всегда отличается. Но у меня нет информации о том, меняется ли созданная ценность со временем. Прошу прощения за эту ситуацию. Если я узнал об информации, я хотел бы сообщить об этом. Если я неправильно понял ваш комментарий, сообщите мне. - person Tanaike; 11.07.2018
comment
@I '-' I Меня тоже интересуют изменения со временем. Я хотел бы попробовать разобраться в этом. Спасибо за интересную тему. - person Tanaike; 11.07.2018

Формула 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.

person Gopala Dasa - HDG    schedule 25.01.2021
comment
Есть ли способ предотвратить пересчет значения каждый раз при обновлении листа? РЕДАКТИРОВАТЬ: похоже, что это невозможно при использовании RANDBETWEEEN, но может быть возможно использование псевдослучайных значений - person ANimator120; 23.06.2021

созданный 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());
  }
}
person komiyak    schedule 31.05.2019

Я попытался создать функцию чистого листа, которая создает полный 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))
person thinkyfish    schedule 11.01.2021

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

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

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

Если соблюдаются 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`);
}

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

person Greg Fenton    schedule 16.01.2021

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

=RANDBETWEEN(10000000,99999999) & "-" & RANDBETWEEN(1000,9999) & "-" & RANDBETWEEN(1000,9999) & "-" & RANDBETWEEN(1000,9999)& "-" & RANDBETWEEN(1000,9999) & RANDBETWEEN(10000000,99999999)
person raterus    schedule 24.08.2020