我們都知道可以像操作數(shù)據(jù)表一樣使用 ADO 來訪問 Excel 文檔, 在 Excel 2003 及以前的版本是使用的Microsoft.Jet.OLEDB.4.0 引擎(簡稱 Jet 引擎)來訪問 Excel 數(shù)據(jù),但隨著 Offic 2007 的推出, 微軟發(fā)布了最新的 Microsoft.ACE.OLEDB.12.0 引擎(簡稱 ACE 引擎). 這個(gè)新的數(shù)據(jù)引擎不僅可以訪問 Excel 2007 文件類型, 還兼容支持 Excel 97-2003 文件類型,下面就來簡單來說一說這兩個(gè)引擎。
示例文件下載
1文件名稱 1下載鏈接 ADO.zip http://pan.baidu.com/s/1qWlXQS8
連接字符串的寫法
不同的 ADO 引擎訪問 Excel 數(shù)據(jù)有不同的連接字符串的寫法,Excel 2003 版本和 2007 版本的寫法分別如下(其中的 [Excel-FullName] 為你需要訪問的 Excel 文件全名):
- Excel2003 及以前版本的寫法:
Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & [Excel-FullName] & _"; Extended Properties='Excel 8.0; HDR=Yes; IMEX=1'"
- Excel2007 及以后版本的寫法:
"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & [Excel-FullName] & _"; Extended Properties='Excel 12.0; HDR=YES; IMEX=1'"
特別說明:
- HDR=YES 表示第一行是列名而不是數(shù)據(jù); HDR=NO 則正好與前面的相反, 系統(tǒng)默認(rèn)為 HDR=YES。
- IMEX ( IMport EXport mode )有三種模式:
0 表示輸出模式: 此時(shí) Excel 文檔只能用來做“寫入”用途。
1 表示輸入模式: 此時(shí) Excel 文檔只能用來做“讀取”用途。
2 表示鏈接模式(完全更新能力): 此時(shí) Excel 文檔可同時(shí)支持“讀取”與“寫入”用途。
示例代碼:
Option Explicit Sub btnADO_Click() On Error Resume Next Application.ScreenUpdating = False Application.DisplayAlerts = False Dim xADOCon As Variant Dim xADORs As Variant Dim xSQLStr As String Dim I As Long ThisWorkbook.Names.Item("Result").RefersToRange.ClearContents '創(chuàng)建數(shù)據(jù)庫連接 Set xADOCon = CreateObject("Adodb.Connection") ' 打開數(shù)據(jù)庫連接 ' 2007及以后版本 xADOCon.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties='Excel 12.0; HDR=YES; IMEX=1'" ' 2003及以前版本 'xADOCon.Open "Provider=Microsoft.jet.OLEDB.4.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties='Excel 8.0; HDR=YES; IMEX=1'" ' 設(shè)置SQL語句 xSQLStr = "SELECT * FROM [Data_1$] WHERE 姓名='王二' OR 姓名='馬五' AND 年齡>30" ' 將SQL語句獲得的數(shù)據(jù)傳遞給數(shù)據(jù)集 Set xADORs = xADOCon.Execute(xSQLStr) ' 獲得SQL結(jié)果的列標(biāo)題 For I = 1 To xADORs.Fields.Count ThisWorkbook.Names.Item("Result").RefersToRange.Cells(1, I) = xADORs.Fields(I - 1).Name Next ThisWorkbook.Names.Item("Result").RefersToRange.Range("a2").CopyFromRecordset xADORs '關(guān)閉數(shù)據(jù)庫連接 xADOCon.Close Set xADOCon = Nothing Application.DisplayAlerts = True Application.ScreenUpdating = TrueEnd Sub |