-
利用ADO讀取excel
一切在機(jī)房的win7電腦中毫無問題
'需要先引入ado 庫
'功能函數(shù)世囊,讀取excel
'這個(gè)函數(shù)可以不用管內(nèi)部的實(shí)現(xiàn)方法
'傳入 excel名稱,與excel sheet表名,'從excel中讀取數(shù)據(jù)萍丐,返回dataset
'dataset 是一種數(shù)據(jù)結(jié)構(gòu),使用方法在下一個(gè)函數(shù)
Function ReadExcel(FileName As String, SheetName As String)
Dim _Connectstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<FilePath>;Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"""
Dim excConn As New OleDb.OleDbConnection(_Connectstring.Replace("<FilePath>", FileName))
'上兩行打開一個(gè)讀取excel的鏈接
Dim mydataset As DataSet = New DataSet
Using da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter("SELECT * FROM [" & SheetName & "$]", excConn)
Try
da.Fill(mydataset, SheetName)
Catch ex As Exception
Console.WriteLine(ex)
End Try
End Using
'上面一段將數(shù)據(jù)寫入到一個(gè)dataset中
Return mydataset
End Function
'從dataset中讀取一個(gè)數(shù)據(jù)
'傳入上個(gè)函數(shù)返回的dataset 放典,sheet名逝变, 第幾行,第幾列, 返回?cái)?shù)據(jù)
'用法看內(nèi)部
Function ReadCell(dataset As DataSet, SheetName As String, row As Integer, col As Integer)
Return dataset.Tables(SheetName).Rows(row).Item(col)
End Function
'下面函數(shù)包含了一個(gè)示例=——=
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ExcelDataSet As DataSet = New DataSet
'調(diào)用ReadExcel 函數(shù)從excel讀取到dataset
ExcelDataSet = ReadExcel("D:Orders1.xls", "Orders")
For i = 1 To 10
For j = 1 To 2
'調(diào)用readcell 從dataset中讀取某一單元格的數(shù)據(jù)
Console.WriteLine(ReadCell(ExcelDataSet, "Orders", i, j))
Next j
Next i
End Sub
2.但是呢奋构,在win10中出現(xiàn)了數(shù)據(jù)庫驅(qū)動(dòng)錯(cuò)誤壳影,經(jīng)百度,發(fā)現(xiàn)是微軟在安全更新中更新了驅(qū)動(dòng)程序
關(guān)于“System.Data.OleDb.OleDbException弥臼,外部數(shù)據(jù)庫驅(qū)動(dòng)程序 (1) 中的意外錯(cuò)誤宴咧。”的解決方案
解決方案:
1径缅、網(wǎng)上的方案是:在控制面板>程序>程序和功能>已安裝更新中掺栅,找到對(duì)應(yīng)的兩個(gè)補(bǔ)丁,進(jìn)行卸載纳猪。不同系統(tǒng)對(duì)應(yīng)不同的補(bǔ)丁氧卧,具體可以參考: http://www.cnblogs.com/net-god/p/7661313.html
2、微軟給出的解決方案是:下載新的驅(qū)動(dòng)引擎( Microsoft Access Database Engine 2010 Redistributable )氏堤,更改
Provider=Microsoft.Jet.OLEDB.4.0Provider=Microsoft.ACE.OLEDB.12.0假抄。
http://blog.csdn.net/question00/article/details/78282292