1. 程式人生 > >vb讀取xls檔案而不開啟excel程序 ado資料庫方法讀取xls

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
 
指示命令應該非同步執行