如何在Excel中创建GUID?

fra*_*ure 39 excel guid

我需要一个函数来向Excel中的单元格添加GUID.我在stackoverflow上找到了上一个问题,但它无效.它建议以下功能:

=CONCATENATE(DEC2HEX(RANDBETWEEN(0,4294967295),8),"-",DEC2HEX(RANDBETWEEN(0,6553??5),4),"-
 ",DEC2HEX(RANDBETWEEN(16384,20479),4),"-",DEC2HEX(RANDBETWEEN(32768,49151??),4),"-
 ",DEC2HEX(RANDBETWEEN(0,65535),4),DEC2HEX(RANDBETWEEN(0,4294967295),8))
Run Code Online (Sandbox Code Playgroud)

我一直无法使concatenate方法工作,所以尝试使用"&"图来连接.这似乎有效,但后来我在第二个DEX2HEX块上出现了一个莫名其妙的错误:DEC2HEX(RANDBETWEEN(0,6553 5),4).Excel公式评估员说这是无效的,但我似乎无法弄清楚为什么.有任何想法吗?

Kon*_*ten 38

从Excel的现代版本开始,语法是逗号,而不是分号.我发布这个答案是为了方便他人,所以他们不必更换字符串 - 我们都懒惰......小时候......人类,对吗?

= CONCATENATE(DEC2HEX(RANDBETWEEN(0,4294967295),8), " - ",DEC2HEX(RANDBETWEEN(0,42949),4), " - ",DEC2HEX(RANDBETWEEN(0,42949),4), " - " ,DEC2HEX(RANDBETWEEN(0,42949),4), " - ",DEC2HEX(RANDBETWEEN(0,4294967295),8),DEC2HEX(RANDBETWEEN(0,42949),4))

或者,如果你喜欢我不喜欢guid尖叫和喊叫你,我们可以像这样低调.

= LOWER(CONCATENATE(DEC2HEX(RANDBETWEEN(0,4294967295),8), " - ",DEC2HEX(RANDBETWEEN(0,42949),4), " - ",DEC2HEX(RANDBETWEEN(0,42949),4)," - ",DEC2HEX(RANDBETWEEN(0,42949),4), " - ",DEC2HEX(RANDBETWEEN(0,4294967295),8),DEC2HEX(RANDBETWEEN(0,42949),4)))

  • 我需要分号,即 `=CONCATENATE(DEC2HEX(RANDBETWEEN(0;4294967295);8);"-";DEC2HEX(RANDBETWEEN(0;42949);4);"-";DEC2HEX(RANDBETWEEN(0;42949); 4);"-";DEC2HEX(RANDBETWEEN(0;42949);4);"-";DEC2HEX(RANDBETWEEN(0;4294967295);8);DEC2HEX(RANDBETWEEN(0;42949);4)) ` (6认同)
  • Comas和分号因本地化而不同,但不是因为现代或不那么现代的Excel.不过好的答案 (4认同)
  • 如果认为“RANDBETWEEN(0,42949)”应该是“RANDBETWEEN(0,65535)”,否则 GUID 的四位数字部分将仅在 0000 和 A7C5 之间,而它们应该一直到 FFFF (3认同)
  • @ReversedEngineer 你是对的。我印象深刻,部分原因是您注意到了这一点,部分原因是近 5 年来没有其他人注意到这一点!我相信我从“4294967295”开始,它对应于“16^8”,即8个连续的“F”。然后,我选择了前 4 位首字母十进制数字。我的错。 (2认同)

小智 27

=CONCATENATE(
    DEC2HEX(RANDBETWEEN(0;4294967295);8);"-";
    DEC2HEX(RANDBETWEEN(0;42949);4);"-";
    DEC2HEX(RANDBETWEEN(0;42949);4);"-";
    DEC2HEX(RANDBETWEEN(0;42949);4);"-";
    DEC2HEX(RANDBETWEEN(0;4294967295);8);
    DEC2HEX(RANDBETWEEN(0;42949);4)
)
Run Code Online (Sandbox Code Playgroud)

  • 我需要更换";" 用","然后一切都很棒!谢谢:)'= CONCATENATE(DEC2HEX(RANDBETWEEN(0,4294967295),8)," - ",DEC2HEX(RANDBETWEEN(0,42949),4)," - ",DEC2HEX(RANDBETWEEN(0,42949),4) , " - ",DEC2HEX(RANDBETWEEN(0,42949),4), " - ",DEC2HEX(RANDBETWEEN(0,4294967295),8),DEC2HEX(RANDBETWEEN(0,42949),4))" (7认同)
  • 如果它像GUID那样走路并且像GUID那样说话,那么它就不是GUID. (3认同)

rch*_*cko 26

我在v.2013 excel vba宏代码中使用以下函数

Public Function GetGUID() As String 
    GetGUID = Mid$(CreateObject("Scriptlet.TypeLib").GUID, 2, 36) 
End Function 
Run Code Online (Sandbox Code Playgroud)

  • 应该使用它来代替Frazture的答案,因为它更直接并且依赖于系统来生成guid.Fraxture的解决方案(没有冒犯)甚至没有创建有效的guid,因为它没有考虑当前时间,MAC地址等因素.他们也不会包含guid版本位.Guids不仅仅是一组随机字符,它们背后还有意义.更多信息:https://en.wikipedia.org/wiki/Globally_unique_identifier#Algorithm (9认同)
  • 注意:安装win更新后,库可能存在问题(Permission denied):/sf/ask/3155758091/ (4认同)
  • 我确认@Radek的评论说,在对Office进行安全更新后,此机制不再有效./sf/answers/3173295261/记录了Microsoft推荐的方法,以防止上述功能导致"权限被拒绝"错误或使用替代功能. (2认同)

Pau*_*aul 5

这根本不是功能问题.

我花了一些时间挖掘,但问题在于复制和粘贴.尝试复制此:RANDBETWEEN(0,6553??5)字符串,在原始问题中发布,然后将其粘贴到十六进制编辑器中,然后您将看到65535中实际上有两个空字符:

00000000  52 41 4E 44 42 45 54 57 45 45 4E 28 30 2C 36 35  RANDBETWEEN(0,65
00000010  35 33 00 00 35 29                                53?..?5)
Run Code Online (Sandbox Code Playgroud)

  • 你是这里真正的黑客和天才 (2认同)

小智 5

=LOWER(
    CONCATENATE(
        DEC2HEX(RANDBETWEEN(0,POWER(16,8)),8), "-", 
        DEC2HEX(RANDBETWEEN(0,POWER(16,4)),4),"-","4", 
        DEC2HEX(RANDBETWEEN(0,POWER(16,3)),3),"-",
        DEC2HEX(RANDBETWEEN(8,11)),
        DEC2HEX(RANDBETWEEN(0,POWER(16,3)),3),"-",
        DEC2HEX(RANDBETWEEN(0,POWER(16,8)),8),
        DEC2HEX(RANDBETWEEN(0,POWER(16,4)),4)
    )
)
Run Code Online (Sandbox Code Playgroud)

取自git @mobilitymaster。

  • 这是由于Excel中的自动计算设置所致。如果您进入“Excel 选项”,然后进入“公式”,那么您将看到名为“工作簿计算”的内容(如果禁用它),则只有当您手动按下底部窗格中的按钮时,它才会运行计算。 (2认同)