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時,還是出現錯誤。相關代碼如下:
CommonDialog1.CancelError?=?FalseCommonDialog1.InitDir?=?App.Path?&?\"\\Data\"Me.CommonDialog1.Filter?=?\"Excel?2010(*.xlsx)|*.xlsx|Excel?2003(*.xls)|*.xls\"CommonDialog1.FilterIndex?=?1CommonDialog1.ShowOpen\'e.g.?\'single.xls\'strName?=?CommonDialog1.FileTitleAdodc1.ConnectionString?=?\"Provider=MSDASQL.1;Persist?Security?Info=False;Data?Source=Excel?Files;Initial?Catalog=\"?&?App.Path?&?strNameAdodc1.CommandType?=?adCmdTextAdodc1.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.
總結
以上是生活随笔為你收集整理的VB 6.0中如何访问EXCEL 2007及EXCEL 2010的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DevExpress右键菜单使用 zt
- 下一篇: Framework7:不会Objecti