ADODB 记录集返回 Excel 中隐藏列的 Null 值

问题描述 投票:0回答:1

我正在尝试使用 ADODB.connection 和 .recordset 对象从 Excel 工作表中检索数据。一般来说,整个过程不会出现任何错误,但是,当隐藏源 Excel 中的列/字段时,记录集查询只会为该特定隐藏列生成“空”值。

连接/记录集显然可以看到隐藏列,因为没有由于无法识别的字段而导致 SQL 错误,我什至可以获得该隐藏列的 rs.Field(i).Name 值。但不知何故,ADO 无法获取隐藏列的值。

使用 rs.copyfromrecordset 方法、循环遍历每个字段的所有记录或在立即窗口中检查时,会返回 Null 值。

我没有看到连接/记录集的任何属性可以处理这种情况。这是 ADO 的限制/错误吗?

编辑。

对于 ConnectionString,我使用具有读取模式和属性 Excel XML 或 Excel 宏的标准 ACE 提供程序。

cn.ConnectionString = _
    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Mode='Read';" & _
    "Data Source=" & fullFilePath & ";" & _
    "Extended Properties='Excel 12.0 Xml;HDR=YES';"
cn.Open

对于记录集,我使用以下设置。

With rs
    .ActiveConnection = cn
    .CursonType = adOpenStatic
    .Source = SQL_Query
    .Open
End with

如果有任何帮助,我们将不胜感激。谢谢!

sql excel vba ado
1个回答
0
投票

问题出在受影响列中的值,正如蒂姆所建议的那样。由于某种原因,Microsoft.ACE.OLEDB 提供程序将该列解释为“日期”类型,并且所有未格式化为“日期”格式的值都被删除(根据我的理解)。该列的任何单元格中都不包含任何日期值,因此仍不清楚为什么列类型会以这种方式解释。我的解决方案是在第一行单元格中插入“'”,以便该列被识别为文本类型。

© www.soinside.com 2019 - 2024. All rights reserved.