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