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 ,如需转载请自行联系原作者

相关文章
|
SQL 存储 关系型数据库
通过excel的VBA 是否可以 直接访问阿里云的RDS数据库(SQL Server)
通过excel的VBA 直接访问阿里云的云数据库(SQL Server)
4384 0
|
C#
办公用品管理系统VB——库存数量导出EXCEL,SaveEXCEL
办公用品管理系统VB——库存数量导出EXCEL,SaveEXCEL 总体来说,VB的EXCEL导出效率还是蛮低的,就是一个小型化的办公用品管理软件,不再优化了。 时间紧迫,就没有从头到尾的用C#编写,从网上看见有源码就直接COPY下来的,添加了一点小功能,编译后给了朋友使用。
2150 0
|
XML 数据格式
【VB6笔记-01】 读取Excel绑定到DataGrid
Private Sub cmdOpen_Click() CommonDialog1.Filter = "Excel???t(*.xlsx)|*.xlsx" CommonDialog1.
1226 0
|
Windows
Microsoft Office Excel 不能访问文件 的解决办法
Microsoft Office Excel 不能访问文件“a.xls”。 可能的原因有: ? 文件名称或路径不存在。  ? 文件正被其他程序使用。  ? 您正要保存的工作簿与当前打开的工作簿同名 This solution is .
3393 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
1748 0
|
数据库 存储 小程序
用数据库访问的方法解决从excel大量导入数据
  要从excel里面导入数据岛程序里面,如果用一般方法 在数量很大的情况下 可能耗费很长的时间。  在网上查询了一些资料获得了一个执行效率相当高的方法,现在写下来以方便以后知识的整理。
993 0
|
安全 数据安全/隐私保护
Microsoft Excel 不能访问文件“ 文件名称或路径不存在。 • 文件正被其他程序使用。 • 您正要保存的工作簿与当前打开的工作簿同名。
Microsoft Office Excel 不能访问文件“D:\WWWRoot\KOBELCOSH\WebUI\ExcelTemplate\QUOTE5.xls”。 可能的原因有: 1 文件名称或路径不存在。
3204 0
|
SQL 安全 测试技术
使用 OpenRowSet 和 OpenDataSource 访问 Excel 97-2007
source:http://blog.csdn.net/Limpire/archive/2008/06/30/2599760.aspx#E10 使用 OpenRowSet 和 OpenDataSource 访问 Excel 97-2007测试文件:D:\97-2003.xls和D:\2007.xlsx,两个文件的内容是一模一样的。
1086 0
|
Java 数据库连接
java直接访问excel的demo
今天一个哥们问,用jdbc能不能把excel作为数据源访问? 考虑之前写的一个java访问access的例子,稍加修改,测试可以用。 测试例子,新建一个excel,命名为Mobile.
1165 0