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

前端之家收集整理的这篇文章主要介绍了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属性链接对话框中根本没有出现上面一条,如下图所示:

403/18/14466241_1395113701oqhR.jpg">


结合上述情况,我又使用中文搜索("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时,还是出现错误。相关代码如下:

CommonDialog1.CancelError=False
CommonDialog1.InitDir=App.Path&\"\\Data\"
Me.CommonDialog1.Filter=\"Excel2010(*.xlsx)|*.xlsx|Excel2003(*.xls)|*.xls\"
CommonDialog1.FilterIndex=1

CommonDialog1.ShowOpen

\'e.g.\'single.xls\'
strName=CommonDialog1.FileTitle
Adodc1.ConnectionString=\"Provider=MSDAsql.1;PersistSecurityInfo=False;DataSource=ExcelFiles;InitialCatalog=\"&App.Path&strName
Adodc1.CommandType=adCmdText
Adodc1.RecordSource=\"Select*from[Sheet1$]\"

Adodc1.Refresh

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

403/19/14466241_13951985148V5J.jpg">


[问题解决]

其实,上面的表达方式基本没有问题,只是最后一句不能在此调用。典型情况下,上述代码应当是在Form_Load方法调用的。于是,应当在Form_Activate方法调用Adodc1.Refresh方法。如此,一切OK!
当然,如果你想使用Adodc1.CommandType=adCmdTable,那么Adodc1RecordSource=”[Sheet1$]"也可以。
至此,问题解决!最终实现了使用VB6(+SP6)访问EXCEL 2010,对于EXCEL 2007虽然没有试验,但估计也是没有问题的!
[补充]

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

猜你在找的VB相关文章