如何在 ListObject 中显示 guid

How can I display guids in a ListObject

我试图在 ListObject 中显示 SQL 语句的结果。 SQL 语句 selects 在 MS-Access table 中并且包含数据类型为 guid.

的列的数据

ListObject 对象是这样创建的

set listObj = activeSheet.listObjects.add( _
    sourceType  := xlSrcExternal         , _
    source      := array(source)         , _
    destination := destCell)

source 是一个字符串,值为 OLEDB;provider=Microsoft.ACE.OLEDB.12.0;data source=p:\ath\do\db.accdb.

我这样执行select语句

with listObj ' {

    .displayName = "foo"

     with .queryTable ' {

         .commandType            = xlCmdSql
         .commandText            = array("select * from tab")

         .refreshOnFileOpen      = false
         .backgroundQuery        = true
         .refreshStyle           = xlInsertDeleteCells
         .saveData               = true
         .refreshPeriod          = 0
         .preserveColumnInfo     = true

         .refresh backgroundQuery := false

     end with ' }

end with ' }

这显示了查询的结果集,但没有包含 guid 的列。

那么,有没有办法添加 guid 列?

我不这么认为,如果你限制自己使用 ListObjects 和 OLEDB。

GUID 在 Access 中表示为二进制数据。 Excel listobjects 无法显示。

要将 GUID 转换为字符串,通常使用 Access 中的 StringFromGUID 函数,但 OLEDB 不支持该函数。

但是,PowerQuery 和 Microsoft Query 本身就可以理解 GUID 并将正确显示它们。不幸的是,通过 VBA 使用 PowerQuery 往往会弹出讨厌的警告,因此 Microsoft Query 往往是最佳选择。

或者,您可以首先在 Access 中执行 SELECT StringFromGUID(MyGuid) As MyGUIDString, * INTO TempTable FROM tab(通过自动化 Access 应用程序),然后在 Excel 中显示它。