前言
本文主要給大家介紹了關于asp.net上傳Excel文件并讀取數據的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧
實現如下:
前臺代碼:使用服務端控件實現上傳
<form id="form1" runat="server"> <div> <asp:FileUpload ID="ExcelFileUpload" runat="server" /> <asp:Button ID="UploadBtn" runat="server" Text="確定上傳" OnClick="UploadBtn_Click" /> </div> </form>
服務端代碼:
protected void UploadBtn_Click(object sender, EventArgs e){ if (ExcelFileUpload.HasFile == false)//HasFile用來檢查FileUpload是否有文件 { Response.Write("<script>alert('請您選擇Excel文件')</script> "); return;//當無文件時,返回 } string IsXls = Path.GetExtension(ExcelFileUpload.FileName).ToString().ToLower();//System.IO.Path.GetExtension獲得文件的擴展名 if (IsXls != ".xlsx" && IsXls != ".xls") { Response.Write(ExcelFileUpload.FileName); Response.Write("<script>alert('只可以選擇Excel文件')</script>"); return;//當選擇的不是Excel文件時,返回 } string filename = ExcelFileUpload.FileName;//獲取Execle文件名 string savePath = Server.MapPath(("UploadExcel//") + filename);//Server.MapPath 服務器上的指定虛擬路徑相對應的物理文件路徑 //savePath ="D:/vsproject/Projects/exceltestweb/exceltestweb/uploadfiles/test.xls" //Response.Write(savePath); DataTable ds = new DataTable(); ExcelFileUpload.SaveAs(savePath);//將文件保存到指定路徑 DataTable dt = GetExcelDatatable(savePath);//讀取excel數據 List<RegNumInfo> regList = ConvertDtToInfo(dt);//將datatable轉為list File.Delete(savePath);//刪除文件 Response.Write("<script>alert('上傳文件讀取數據成功!');</script>");}/// <summary>/// 從excel文件中讀取數據/// </summary>/// <param name="fileUrl">實體文件的存儲路徑</param>/// <returns></returns>private static DataTable GetExcelDatatable(string fileUrl){ //支持.xls和.xlsx,即包括office2010等版本的;HDR=Yes代表第一行是標題,不是數據; string cmdText = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileUrl + "; Extended Properties=/"Excel 12.0;HDR=Yes/""; System.Data.DataTable dt = null; //建立連接 OleDbConnection conn = new OleDbConnection(cmdText); try { //打開連接 if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed) { conn.Open(); } System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); string strSql = "select * from [Sheet1$]"; //這里指定表明為Sheet1,如果修改過表單的名稱,請使用修改后的名稱 OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn); DataSet ds = new DataSet(); da.Fill(ds); dt = ds.Tables[0]; ; return dt; } catch (Exception exc) { throw exc; } finally { conn.Close(); conn.Dispose(); }}/// <summary>/// 將datatable轉換為list集合/// </summary>/// <param name="dt">DataTable</param>/// <returns></returns>private static List<RegNumInfo> ConvertDtToInfo(DataTable dt){ List<RegNumInfo> list = new List<RegNumInfo>(); if (dt.Rows.Count > 0) { foreach (DataRow item in dt.Rows) { RegNumInfo info = new RegNumInfo(); info.RegNum = item[0].ToString(); info.Name = item[1].ToString(); info.Period = item[2].ToString(); info.Remark = item[3].ToString(); list.Add(info); } } return list;}
新聞熱點
疑難解答
圖片精選