ADO.NET读取Excel数据

时间:2008/3/16 23:12:21      阅读:8182     附件: readexcel.rar (经验值:5)     下载:14
      最近的系统需要在SQL数据库与Execl之间互导数据,找了一些资料,ADO.NET可以使用使用Microsoft.Jet.OleDb访问访问Excel,网上已经有很多类似的资源,俺整理了两种方法,第一种方法可以从Excel中批量导入数据到SQL中,实现如下:
' 连接字符串
Dim xlsPath As String = Server.MapPath("~/app_data/ExcelFile.xls") ' 绝对物理路径
Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & xlsPath & "; Extended Properties=Excel 8.0;"
' 查询语句
Dim sql As String = "SELECT * FROM [Sheet1$]"

Dim ds As DataSet = New DataSet()
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(sql, connStr)
da.Fill(ds)
' 填充DataSet

' 在这里对DataSet中的数据进行操作

' 输出,绑定数据
GridView1.DataSource = ds.Tables(0)
GridView1.DataBind()
俺只整理了绑定到GridView中的代码。
 
第二种方法针对自定义Excel数据表的导入,此方法在读取Excel文件时系统自动会打开一个Excel.exe进程,使用myExcel.Workbooks.Close无法关闭,俺也整理了如何关闭Excel.exe进程的代码,HTML代码如下:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Excel.aspx.vb" Inherits="_Excel" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>读取Excel数据</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox3" runat="server" Width="60px" Text="1" />工作表
<asp:TextBox ID="TextBox1" runat="server" Width="60px" Text="1" />
<asp:TextBox ID="TextBox2" runat="server" Width="60px" Text="1" /><br />
Excel数据:
<input id="File1" runat="server" name="File1" size="30" type="file" />
<asp:Button ID="BtnRExcel" runat="server" Text="读取Excel的某行某列" /></div>
</form>
</body>
</html>
VB.NET代码:
Imports Microsoft.Office.Interop

Partial Class _Excel
Inherits System.Web.UI.Page

Protected Sub BtnRExcel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnRExcel.Click
Dim strPath As String = File1.PostedFile.FileName
If strPath = "" Then
Me.Response.Write("请选择要导入的Excel数据文件!")
Else

Dim excelFilePath As String = strPath
Dim myExcel As Excel.Application = New Excel.ApplicationClass() '创建一个Excel对象
Dim oMissing As Object = System.Reflection.Missing.Value
myExcel.Application.Workbooks.Open(excelFilePath, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing)
Dim myBook As Excel.Workbook = myExcel.Workbooks(1) '定义一个工作表组
Dim mySheet As Excel.Worksheet = CType(myBook.Worksheets(CInt(TextBox3.Text)), Excel.Worksheet) '定义一个工作表

Dim r As Excel.Range = CType(mySheet.Cells(CInt(TextBox1.Text), CInt(TextBox2.Text)), Excel.Range)

Me.Response.Write("Excel中第" & TextBox1.Text & "行 第" & TextBox2.Text & "列的值:" & (r.Value).ToString)
ExcelGC(myExcel, myBook, mySheet, r)

End If

End Sub

'关闭Excel进程
Private Shared Sub ExcelGC(ByRef myExcel As Excel.Application, ByRef myBook As Excel.Workbook, ByRef mySheet As Excel.Worksheet, ByRef r As Excel.Range)
myBook.Close(
False, Type.Missing, Type.Missing)
myExcel.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(r)
System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel)
System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheet)
System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook)
mySheet
= Nothing
myBook
= Nothing
myExcel
= Nothing
r
= Nothing
GC.Collect()
End Sub
End Class
实现如图:
评论
  • Re:ADO.NET读取Excel数据  (2008/4/10 14:13:34) by wutongyuyunying 
    学习
  • Re:ADO.NET读取Excel数据  (2008/5/1 22:27:51) by asdf 
    我想下来看看
  • Re:ADO.NET读取Excel数据  (2008/11/25 9:18:39) by 杨扬 
    第一种方法Excel中批量导入数据到SQL中,Excel工作表的名称必须是sheet,可以动态获得工作表的名称吗?
  • Re:ADO.NET读取Excel数据  (2008/12/15 13:47:51) by 123123 
    我相要﹗學習~
  • Re:ADO.NET读取Excel数据  (2008/12/16 12:58:13) by LION 

    用第二種方法,選擇excel後,讀數據出現以下錯誤,請問是什麼原因?

     


    存取被拒。
    描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。

    例外詳細資訊: System.UnauthorizedAccessException: 存取被拒。

    沒有授權 ASP.NET 存取要求的資源。請考慮將資源存取權授予 ASP.NET 要求識別。ASP.NET 有一個基本處理序識別 (通常在 IIS 5 上為 {MACHINE}\ASPNET,在 IIS 6 上為 Network Service),會在應用程式未模擬的情況下使用。如果應用程式是透過 <identity impersonate="true"/> 模擬,這個識別將會是匿名使用者 (通常為 IUSR_MACHINENAME) 或經過驗證的要求使用者。

    若要取得 ASP.NET 寫入檔案的存取權限,請在檔案總管中以右鍵按一下檔案,選擇 [內容] 並選取 [安全] 索引標籤。按一下 [新增] 加入適當的使用者或群組。反白顯示 ASP.NET 帳戶,並且選取所需存取權限的核取方塊。

    原始程式錯誤:

    行 45:         Else
    行 46:             Dim excelFilePath As String = strPath
    行 47:             Dim myExcel As Excel.Application = New Excel.ApplicationClass '創建一個excel對象
    行 48:             Dim oMissing As Object = System.Reflection.Missing.Value
    行 49:             myExcel.Application.Workbooks.Open(excelFilePath, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing)

    原始程式檔: C:\123\wwwroot\read\WebForm1.aspx.vb    行: 47
  • Re:ADO.NET读取Excel数据  (2008/12/16 17:14:01) by flintsir 
    感觉很不错啊.
  • Re:ADO.NET读取Excel数据  (2009/4/8 9:51:25) by lclc88 
    是不是只有标准的EXcel才能读啊,,其它的都读不了
标 题:
 
姓 名:
 
主 页:

验证码:

评论:
 

Because of the cache,you may see your comments several minutes later.