ADO方式读取EXCEL数据存在致命BUG!!!!!
本文适合使用VBA编程(清泛网注:C++ ADO读Excel也适用)的网友阅读。
在进行VBA编程时,为了使程序适用范围广,执行效率高,大家都喜欢使用ADO方式来读取excel文档,该方式有如下优点:
1、即使是当前机器上没有安装excel,也能通过ado方式读取excel文档中的数据;
2、不用打开excel,直接调用数据,执行效率高。
把下面这段代码拷贝到VBA窗口,执行后会依次显示每个工作表表的名称:
Sub x()
Dim ExcelDB As New ADODB.Connection
Dim RS As ADODB.Recordset
Dim S As String
Set ExcelDB = New ADODB.Connection
Set RS = New Recordset
If Application.Version < 12 Then ExcelDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False; Data Source=" & ActiveWorkbook.FullName & ";Extended Properties='Excel 8.0;HDR=No'"
If Application.Version >= 12 Then ExcelDB.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ActiveWorkbook.FullName & ";Extended Properties='Excel 12.0;HDR=NO';"
Set RS = ExcelDB.OpenSchema(adSchemaTables)
Do While Not RS.EOF
S = RS("Table_Name")
If Left(S, 1) = "'" Then S = Mid(S, 2, Len(S) - 3) Else S = Mid(S, 1, Len(S) - 1)
MsgBox S
RS.MoveNext
Loop
End Sub
当我们高高兴兴地认为找到这么一种完美的方式读取excel数据时,我们却不知道微软已经暗中埋下夺命地雷:
如果工作表的名称中含有符号“.”则会变成“#”!!!!
比如工作表名称为:TEK-V1.0LT #7-30
通过这种ADO方式获取的名称却变为:TEK-V1#0LT #7-30
因此,在此郑重提醒各位,ADO读取excel数据方式有风险,使用需谨慎!