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

VB 6.0中如何访问EXCEL 2007及EXCEL 2010,第1张

概述问题及分析过程 最近一段时间在使用VB 6.0开发一个OFFICE考试系统,理想的情况是支持WINDOWS XP,WINDOWS 7,WINDOWS 8,Office 2003和Office 2010。之所以,选择VB 6主要原因是使用VBA录制的宏可以经过简单精简即可应用于VB6程序中。另外,VB6的体积也小,而且其他几位老师都易于上手。 但是,在使用VB6导入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属性链接对话框中根本没有出现上面一条,如下图所示:

650) this.wIDth=650;" src="http://img.jb51.cc/vcimg/static/loading.png" alt="" height="431" wIDth="409" src="http://blog.itpub.net/attachment/201403/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=FalseCommonDialog1.InitDir=App.Path&\"\Data\"Me.CommonDialog1.Filter=\"Excel2010(*.xlsx)|*.xlsx|Excel2003(*.xls)|*.xls\"CommonDialog1.FilterIndex=1CommonDialog1.ShowOpen\'e.g.\'single.xls\'strname=CommonDialog1.fileTitleAdodc1.ConnectionString=\"ProvIDer=MSDAsql.1;PersistSecurityInfo=False;DataSource=Excelfiles;InitialCatalog=\"&App.Path&strnameAdodc1.CommandType=adCmdTextAdodc1.RecordSource=\"Select*from[Sheet1$]\"Adodc1.Refresh

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

650) this.wIDth=650;" src="http://img.jb51.cc/vcimg/static/loading.png" alt="" height="194" wIDth="484" src="http://blog.itpub.net/attachment/201403/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 6.0中如何访问EXCEL 2007及EXCEL 2010全部内容,希望文章能够帮你解决VB 6.0中如何访问EXCEL 2007及EXCEL 2010所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1274329.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存