如何在Excel中创建GUID?

15 浏览
0 Comments

如何在Excel中创建GUID?

我需要一个将GUID添加到Excel单元格的函数。我在stackoverflow上找到了一个相关问题(链接),但它没有起作用。它建议使用以下函数:\n=CONCATENATE(DEC2HEX(RANDBETWEEN(0,4294967295),8),\"-\",DEC2HEX(RANDBETWEEN(0,6553‌​5),4),\"-\"\n ,DEC2HEX(RANDBETWEEN(16384,20479),4),\"-\",DEC2HEX(RANDBETWEEN(32768,49151‌​),4),\"-\"\n ,DEC2HEX(RANDBETWEEN(0,65535),4),DEC2HEX(RANDBETWEEN(0,4294967295),8))\n\n我无法使concatenate方法起作用,所以尝试使用\"&\"符号进行拼接。看起来似乎可以工作,但是我在第二个DEX2HEX块上遇到了一个无法解释的错误:DEC2HEX(RANDBETWEEN(0,6553‌​5),4)。Excel公式计算器显示它是无效的,但我无法弄清楚原因。有什么想法吗?

0
0 Comments

如何在Excel中创建GUID?

有人在Excel 2013中使用以下代码创建GUID,但是遇到了一些问题:

=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)

)

但是,这段代码中使用的分号在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。

需要注意的是,这段代码生成的不是有效的版本4的GUID/UUID。可以参考维基百科中的相关说明:en.wikipedia.org/wiki/…

如果需要生成有效的版本4的GUID/UUID,可以参考以下链接中给出的代码:

- stackoverflow.com/a/12219726/729642

- Masud、Fredder、nidkil等用户的答案。

此外,有人认为RANDBETWEEN(0;42949)应该改为RANDBETWEEN(0;65535),否则GUID中的四位数字部分将只在0000和A7C5之间,而实际上应该可以达到FFFF的范围。

0
0 Comments

在Excel中创建GUID的问题是由于需要在VBA宏代码中生成GUID而引起的。下面是解决这个问题的方法。

首先,可以使用以下VBA函数来生成GUID:

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

这个函数是一个比较简单且可靠的方法来生成GUID。它使用了系统来生成GUID,因此不需要考虑当前时间、MAC地址等因素。

除了上述方法,还可以使用以下VBA函数来生成GUID:

Declare Function CoCreateGuid Lib "ole32" (ByRef GUID As Byte) As Long 
Public Function GenerateGUID() As String 
    Dim ID(0 To 15) As Byte 
    Dim N As Long 
    Dim GUID As String 
    Dim Res As Long 
    Res = CoCreateGuid(ID(0)) 
    For N = 0 To 15 
        GUID = GUID & IIf(ID(N) < 16, "0", "") & Hex$(ID(N)) 
        If Len(GUID) = 8 Or Len(GUID) = 13 Or Len(GUID) = 18 Or Len(GUID) = 23 Then 
            GUID = GUID & "-" 
        End If 
    Next N 
    GenerateGUID = GUID 
End Function

这个函数使用了CoCreateGuid函数来生成GUID,并且添加了一些格式化的代码,使生成的GUID符合标准的格式。

需要注意的是,在安装Windows更新之后,可能会遇到库的问题(权限被拒绝)。可以参考以下链接中的解决方法:

https://stackoverflow.com/questions/45082258

另外,有用户在安全更新后报告说上述方法不再有效。可以参考以下链接中的解决方法:

https://stackoverflow.com/a/45332789/575559

这个链接中提到了微软推荐的方法,可以避免上述函数在引发“权限被拒绝”错误时使用,或者使用替代函数来生成GUID。

以上是在Excel中创建GUID的原因以及解决方法的整理。

0
0 Comments

如何在Excel中创建GUID?

在现代版本的Excel中,有逗号而不是分号的语法。我发布这个答案是为了方便其他人,这样他们就不必替换字符串——我们都很懒……嗯……人类,对吧?

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

或者,如果你像我一样不喜欢一个GUID大声喊叫,你可以像这样使用小写。

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

逗号和分号之间的区别是因为本地化而不是现代或不那么现代的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))

我认为这是我有史以来最受欢迎的答案。有点难过,因为我在其他技术方面更有技巧。当然,我对得到的任何东西都很高兴,但还是……

不要误解我,你的答案对我很有用,我给了你点赞。只是想提一下,由于某些原因,我的Excel版本需要使用分号而不是逗号分隔参数——不知道可以在哪里配置(但正如trigras提到的,肯定是本地化问题)。然而,使用逗号,它在我的电脑上不起作用,但使用分号则可以——所以我想这可能对某些人有用,我将其放在评论中。

我不能代表他的经验。我相信不同版本之间可能会有所更改,但这也可能取决于本地化。重要的是要记住,它总是有可能更改,所以如果停止工作,应该尝试这个和那个。谢谢你的点赞。我喜欢那些小勾勾,哈哈。

如果有人在西班牙(español)的Excel安装中需要它:=CONCATENAR(DEC.A.HEX(ALEATORIO.ENTRE(0;4294967295);8);"-";DEC.A.HEX(ALEATORIO.ENTRE(0;65536);4);"-";DEC.A.HEX(ALEATORIO.ENTRE(0;65536);4);"-";DEC.A.HEX(ALEATORIO.ENTRE(0;65536);4);"-";DEC.A.HEX(ALEATORIO.ENTRE(0;4294967295);8);DEC.A.HEX(ALEATORIO.ENTRE(0;65536);4))

请注意,这不是UUID v4。第三个组需要以4开头。

我不确定是否理解你的意思。你能提供任何支持该说法的参考资料吗?据我所知,没有限制任何定义组包含的内容。

uuidtools.com/decode

我看到M位数表示版本,可能是4。然而,并没有说明应该是4。你是否在说建议的Excel公式生成的版本是4?如何确定?请帮助我理解。

随机UUID是版本4。所有版本都分配给不同的目的。guid.one/guid

我不知道GUID的这个属性。我感到受宠若惊和惊讶。非常感谢您教育我。这是一个非常有趣的知识。

用户发布的公式的问题在于其中一个65535个字符中有两个空字符(CHAR(0))。请参阅下面的我的答案。

这个评论是在回答我的答案、原始问题还是任何评论吗?

0