Как создать uuid в листе Google (например, ccb8a660-91c9-a556-58e0-4fa7-229516872004).
Либо с помощью макроса? или формула?
Как создать uuid в листе Google (например, ccb8a660-91c9-a556-58e0-4fa7-229516872004).
Либо с помощью макроса? или формула?
Вы можете сгенерировать UUID, используя Utilities.getUuid()
. Но необходимо использовать пользовательскую функцию для достижения того, чего вы хотите, потому что в функциях электронной таблицы для этого нет функций. Чтобы сгенерировать UUID, выполните следующий процесс.
=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();
}
=uuid()
to a cell in a sheet.
=uuid()
is put as a custom function. So when the Spreadsheet is automatically calculated, the value is changed.=uuid(true)
to a cell in a sheet.
=uuid()
is put as a value by onEdit()
. So even when the Spreadsheet is automatically calculated, the value is NOT changed.=uuid(true)
можно использовать, когда функция помещается вручную, потому что при этом используется триггер события OnEdit.Utilities.getUuid()
, результат всегда отличается. Но у меня нет информации о том, меняется ли созданная ценность со временем. Прошу прощения за эту ситуацию. Если я узнал об информации, я хотел бы сообщить об этом. Если я неправильно понял ваш комментарий, сообщите мне.
- 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.
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());
}
}
Я попытался создать функцию чистого листа, которая создает полный 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 проверки:
Если соблюдаются 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`);
}
Надеюсь, это кому-то пригодится!
Попробуйте это, если вам просто нужна формула, которую можно быстро ввести. Предостережение заключается в том, что у вас не будет никаких альфа-символов в сгенерированном значении, но они должны быть достаточно хороши практически для любых целей независимо.
=RANDBETWEEN(10000000,99999999) & "-" & RANDBETWEEN(1000,9999) & "-" & RANDBETWEEN(1000,9999) & "-" & RANDBETWEEN(1000,9999)& "-" & RANDBETWEEN(1000,9999) & RANDBETWEEN(10000000,99999999)