Как сгенерировать uuid в гугл листе?
Как сгенерировать uuid в google sheet (например, ccb8a660-91c9-a556-58e0-4fa7-229516872004).
Либо с макросом? или формула? Я не нашел решение в справке Google.
Мерси Дом
7 ответов
Вы можете генерировать UUID, используя Utilities.getUuid()
, Но для достижения того, что вы хотите, нужно использовать пользовательскую функцию, потому что в функциях Spreadsheet для нее нет функций. Чтобы сгенерировать UUID, выполните следующий поток.
- Откройте редактор скриптов для создания скрипта Google Apps.
- Скопируйте и вставьте следующий скрипт и сохраните его.
- Положил
=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 проверки:
- выбранный диапазон должен охватывать только один столбец
- все выбранные ячейки должны быть пустыми (т. е. ни одна из выбранных ячеек не может иметь значения)
Если соблюдены два вышеуказанных ограничения, каждая ячейка заполняется значением. Вот код макроса:
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)