vb讀取xls檔案而不開啟excel程序 ado資料庫方法讀取xls
'Read Excel File Using ADO
Public Function Read_Excel _
(ByVal sFile _
As String) As ADODB.Recordset
'函式引數
On Error GoTo fix_err '有錯去fix_err那個標籤
Dim rs As ADODB.Recordset '搞了個物件:)
Set rs = New ADODB.Recordset '設定了個物件rs
Dim sconn As String '搞了個字串
rs.CursorLocation = adUseClient '物件遊標位
rs.CursorType = adOpenKeyset '遊標型別
rs.LockType = adLockBatchOptimistic '物件之鎖定(我想要獨佔!除非你換location)
sconn = "DRIVER=Microsoft Excel Driver (*.xls);" & "DBQ=" & sFile '字串設定,sFile是傳引數的,用excel驅動去讀這個檔案
rs.Open "SELECT * FROM [sheet1$]", sconn '選取全部
Set Read_Excel = rs '新物件完全等於rs舊物件
Set rs = Nothing '幹掉舊物件(臨時)
Exit Function
fix_err:
Debug.Print Err.Description + " " + _
Err.Source, vbCritical, "Import"
Err.Clear
End Function
於是你就有了一個物件Read_Excel ,可以使用本物件去查任何你要的東東;
找物件要找好物件:)
附錄,對付物件的方法供參考:
rs.movenext 將記錄指標從當前的位置向下移一行
rs.moveprevious 將記錄指標從當前的位置向上移一行
rs.movefirst 將記錄指標移到資料表第一行
rs.movelast 將記錄指標移到資料表最後一行
rs.absoluteposition=N 將記錄指標移到資料表第N行
rs.absolutepage=N 將記錄指標移到第N頁的第一行
rs.pagesize=N 設定每頁為N條記錄
rs.pagecount 根據 pagesize 的設定返回總頁數
rs.recordcount 返回記錄總數
rs.bof 返回記錄指標是否超出資料表首端,true表示是,false為否
rs.eof 返回記錄指標是否超出資料表末端,true表示是,false為否
rs.delete 刪除當前記錄,但記錄指標不會向下移動
rs.addnew 新增記錄到資料表末端
rs.update 更新資料表記錄
---------------------------------------
Recordset物件方法
Open方法
recordset.Open Source,ActiveConnection,CursorType,LockType,Options
Source
Recordset物件可以通過Source屬性來連線Command物件。Source引數可以是一個Command物件名稱、一段SQL命令、一個指定的資料表名稱或是一個Stored Procedure。假如省略這個引數,系統則採用Recordset物件的Source屬性。
ActiveConnection
Recordset物件可以通過ActiveConnection屬性來連線Connection物件。這裡的ActiveConnection可以是一個Connection物件或是一串包含資料庫連線信(ConnectionString)的字串引數。
CursorType
Recordset物件Open方法的CursorType引數表示將以什麼樣的遊標型別啟動資料,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
----------------------------------------------------------------------------------------------------------------------
常數 常數值 說明
----------------------------------------------------------------------------------------------------------------------
adOpenForwardOnly 0 預設值,啟動一個只能向前移動的遊標(Forward Only)。
adOpenKeyset 1 啟動一個Keyset型別的遊標。
adOpenDynamic 2 啟動一個Dynamic型別的遊標。
adOpenStatic 3 啟動一個Static型別的遊標。
----------------------------------------------------------------------------------------------------------------------
以上幾個遊標型別將直接影響到Recordset物件所有的屬性和方法,以下說明他們之間的區別。
----------------------------------------------------------------------------------------------------------------------
LockType
Recordset物件Open方法的LockType引數表示要採用的Lock型別,如果忽略這個引數,那麼系統會以Recordset物件的LockType屬性為預設值。LockType引數包adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:
----------------------------------------------------------------------------------------------------------------------
常數 常數值 說明
----------------------------------------------------------------------------------------------------------------------
adLockReadOnly 1 預設值,Recordset以只讀啟動無法運 行AddNew、UpdatDelete
adLockPrssimistic 2 當資料來源正在更新時,系統會暫時鎖住其他使用者動作保持資料一致
adLockOptimistic 3 當資料來源正在更新時,系統並不會鎖住其他使用者的動作。
adLockBatchOptimistic 4 當資料來源正在更新時,其他使用者必須將 CursorLocation屬性改為 adUdeClientBatch才能對資料進行增、刪、改的操作。
Options
常 量
說 明
adCmdText
指示提供者應將sCommandText賦值為命令的文字定義
adCmdTable
指示ADO應生成SQL查詢,以便從sCommandText命名的表中返回所有行
adCmdTableDirect
指示提供者應從sCommandText命名的表中返回所有行
adCmdTable
指示提供者應將sCommandText賦值為表名
adCmdStoredProc
指示提供者應將sCommandText賦值為儲存過程
adCmdUnknown
指示sCommandText引數中的命令型別未知
adExecuteAsync
指示命令應該非同步執行