VB 6.0中如何访问EXCEL 2007及EXCEL 2010

简介:

问题及分析过程


最近一段时间在使用VB 6.0开发一个OFFICE考试系统,理想的情况是支持WINDOWS XP,WINDOWS 7,WINDOWS 8,Office 2003和Office 2010。之所以,选择VB 6主要原因是使用VBA录制的宏可以经过简单精简即可应用于VB6程序中。另外,VB6的体积也小,而且其他几位老师都易于上手。

但是,在使用VB6导入EXCEL 2010数据时却发现了问题。直接的想法是,在窗体上添加一个ADODC控件,通过其属性设置来访问EXCEL 2010。于是,第一个想到的是使用Microsoft Jet 4.0 OLE DB Provider。但是,在测试连接时,总是出现错误提示“找不到可安装的ISAM”,相应的英文提示是“Could not find installable ISAM”。于是搜索了许多参考答案,但是由于例子中都是访问EXCEL 2003或者以下版本,始终找不到答案-总是出现上面的提示。根据有些网站提示,安装了最新的VB6的SP6,也根本无济于事。

最后,还是英文搜索帮了忙。在MSDN一个地方(http://social.msdn.microsoft.com/Forums/en-US/ae6f73a1-011f-4d8e-bcf5-80917e39ef97/could-not-find-installable-isam),描述如下:

“Jet OLEDB does not support Excel 2007 and Excel 2010 file formats. You need to install ACE OLEDB provider for it.”

这是微软的MVP给出的描述,自然错误可能性很小。循着这个思路和其中提供的链接(http://www.microsoft.com/en-us/download/confirmation.aspx?id=13255)。我下载并安装了其提供的Microsoft Access Database Engine 2010 Redistributable。

结果,也是令人失望。在VB6的ADODC属性链接对话框中根本没有出现上面一条,如下图所示:




结合上述情况,我又使用中文搜索("VB 6.0如何访问EXCEL 2010"),终于在地址http://blog.sina.com.cn/s/blog_6e001be701016yi8.html找到比较明确的参考答案。当然,这个结论与上面那个MVP提供的信息是一致的。


结论

在VB6中目前不能通过ADODC控件方式借助JET引擎访问EXCEL 2010,即使安装了上述新的访问工具(这个工具是用于VB.NET访问新版本的EXCEL使用的)。但是,在上图中可以使用如图中所示的另外一种方式(Microsoft OLE DB provide for ODBC DRIVER)直接在ADODC控件中访问EXCEL 2010(我现在就使用了这种方式)。尽管花费了不少时间,终于有一个结果,还算欣慰一些……

[补充]

很遗憾很疑惑,我在通过代码使用ADODC控件访问EXCEL 2010时,还是出现错误。相关代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CommonDialog1.CancelError = False
     CommonDialog1.InitDir = App.Path & \"\\Data\"
     Me.CommonDialog1.Filter = \"Excel  2010 (*.xlsx)|*.xlsx|Excel  2003 (*.xls)|*.xls\"
     CommonDialog1.FilterIndex =  1
     
     CommonDialog1.ShowOpen
 
     \'e.g. \'single.xls\'
     strName = CommonDialog1.FileTitle
         Adodc1.ConnectionString = \"Provider=MSDASQL. 1 ;Persist Security Info=False;Data Source=Excel Files;Initial Catalog=\" & App.Path & strName
         Adodc1.CommandType = adCmdText
         Adodc1.RecordSource = \"Select * from [Sheet1$]\"
         
         Adodc1.Refresh

运行过程中出现具体错误提示如下图所示(答案正在寻找中……)




[问题解决]

其实,上面的表达方式基本没有问题,只是最后一句不能在此调用。典型情况下,上述代码应当是在Form_Load方法中调用的。于是,应当在Form_Activate方法中调用Adodc1.Refresh方法。如此,一切OK!

当然,如果你想使用Adodc1.CommandType = adCmdTable,那么Adodc1.RecordSource =”[Sheet1$]"也可以。

至此,问题解决!最终实现了使用VB6(+SP6)访问EXCEL 2010,对于EXCEL 2007虽然没有试验,但估计也是没有问题的!


[补充]

文章http://www.excelpx.com/thread-228696-1-1.html处提供了较细致的访问方法,只可以估计是针对VB.NET的方案,根本不适合VB6.














本文转自朱先忠老师51CTO博客,原文链接:http://blog.51cto.com/zhuxianzhong/1439674 ,如需转载请自行联系原作者

相关文章
|
C#
办公用品管理系统VB——库存数量导出EXCEL,SaveEXCEL
办公用品管理系统VB——库存数量导出EXCEL,SaveEXCEL 总体来说,VB的EXCEL导出效率还是蛮低的,就是一个小型化的办公用品管理软件,不再优化了。 时间紧迫,就没有从头到尾的用C#编写,从网上看见有源码就直接COPY下来的,添加了一点小功能,编译后给了朋友使用。
1855 0
|
数据库
机房收费系统——VB将MSHflexgrid控件中的数据导出为Excel
<p>      </p> <p>     <span style="font-family:KaiTi_GB2312; font-size:24px"> 在做机房收费系统的时候,许多窗体用到的一个功能,就是将从数据库中提取出来的数据导出到Excel中。</span></p> <p><span style="font-family:KaiTi_GB2312; font-size:24p
1578 0
|
17天前
|
SQL 缓存 easyexcel
面试官问10W 行级别数据的 Excel 导入如何10秒处理
面试官问10W 行级别数据的 Excel 导入如何10秒处理
46 0
|
28天前
|
安全 Java 数据库连接
jdbc解析excel文件,批量插入数据至库中
jdbc解析excel文件,批量插入数据至库中
19 0
|
1月前
|
Java API Apache
使用AOP+反射实现Excel数据的读取
使用AOP+反射实现Excel数据的读取
excel根据数据得出公式
excel根据数据得出公式
|
1月前
|
SQL 数据可视化 数据处理
使用SQL和Python处理Excel文件数据
使用SQL和Python处理Excel文件数据
51 0
|
28天前
|
安全 Java 数据库连接
jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)
jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)
153 0
|
1月前
|
存储 数据处理 Python
使用Python批量合并Excel文件的所有Sheet数据
使用Python批量合并Excel文件的所有Sheet数据
28 0