提问人:brutus17 提问时间:11/17/2023 最后编辑:brutus17 更新时间:11/18/2023 访问量:62
ADODB Recordset 返回 Excel 中隐藏列的 Null 值
ADODB Recordset return Null values for hidden columns in Excel
问:
我正在尝试使用 ADODB.connection 和 .recordset 对象从 Excel 工作表中检索数据。通常,整个过程不会出现任何错误,但是,当隐藏源 excel 中的列/字段时,记录集查询仅为该特定隐藏列生成“Null”值。
隐藏的列显然可以通过连接/记录集看到,因为没有由于无法识别的字段而导致的 SQL 错误,我什至可以得到 rs。字段(i)。此隐藏列的名称值。但不知何故,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
将不胜感激任何帮助。谢谢!
答:
0赞
brutus17
11/26/2023
#1
正如 Tim 所建议的那样,问题在于受影响列中的值。出于某种原因,Microsoft.ACE.OLEDB 提供程序将该列解释为“日期”类型,并且所有未以“日期”格式格式设置的值都被删除(根据我的理解)。该列在任何单元格中都不包含任何日期值,因此尚不清楚为什么以这种方式解释列类型。我的解决方案是在第一行单元格中插入“ ' ”,以便将该列识别为文本类型。
评论
0赞
Michele La Ferla
11/27/2023
理想情况下,我会更好地格式化答案以显示代码片段
评论
Provider=Microsoft.ACE.OLEDB.12.0
sql = "select * from [sheet1$a:f]"