ADO方式读取EXCEL数据存在致命BUG!!!!!

来源:     2016-09-09 09:14:23    人气:     我有话说( 0 人参与)

本文适合使用VBA编程(清泛网注:C++ ADO读Excel也适用)的网友阅读。在进行VBA编程时,为了使程序适用范围广,执行效率高,大家都喜欢使用A...

本文适合使用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数据方式有风险,使用需谨慎!

ADO 读取 EXCEL

本文源自互联网,采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可,
版权归原作者,如有问题请联系service@tsingfun.com (编辑:admin)
分享到: