前提條件:html
根目錄下創建uploadfiles文件夾(用於保存上傳的xls文件);sql
aspx部分:數據庫
添加uploadfile和button控件便可。數組
aspx 部分代碼:服務器
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 <html xmlns="http://www.w3.org/1999/xhtml"> 4 <head runat="server"> 5 <title></title> 6 </head> 7 <body> 8 <form id="form1" runat="server"> 9 <div> 10 <asp:FileUpload ID="FileUpload1" runat="server" /> 11 <asp:Button ID="Button1" runat="server" Text="肯定上傳" onclick="Button1_Click" /> 12 </div> 13 </form> 14 </body> 15 </html>
cs 部分:ide
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using System.Data; 8 using System.Data.OleDb; 9 using System.IO; 10 11 namespace ImportExcel 12 { 13 public partial class _Default : System.Web.UI.Page 14 { 15 protected void Page_Load(object sender, EventArgs e) 16 { 17 18 } 19 20 #region 問題:未在本地計算機上註冊Microsoft.ACE.OLEDB.12.0提供程序 21 // 解決訪問Excel數據源時出現 未在本地計算機上註冊Microsoft.ACE.OLEDB.12.0提供程序 22 // 一、確保安裝了Microsoft.ACE.OLEDB.12.0驅動 23 // http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe 24 // 二、在vs中右擊項目--》屬性--》生成 下的 目標平臺 改成x86 25 // 若是以上兩個方法仍是不行的話,用第三個方法 26 // 三、在對應的 IIS 應用程序池中,「設置應用程序池默認屬性」右擊/「高級設置」/"啓用32位應用程序",設置爲 true。 27 #endregion 28 29 public System.Data.DataTable GetExcelDatatable(string fileUrl) 30 { 31 //支持.xls和.xlsx,即包括office2010等版本的 HDR=Yes表明第一行是標題,不是數據; 32 string cmdText = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"; 33 System.Data.DataTable dt = null; 34 //創建鏈接 35 OleDbConnection conn = new OleDbConnection(string.Format(cmdText, fileUrl)); 36 try 37 { 38 //打開鏈接 39 if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed) 40 { 41 conn.Open(); 42 } 43 44 System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 45 string strSql = "select * from [Sheet1$]"; 46 OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn); 47 DataSet ds = new DataSet(); 48 da.Fill(ds); 49 dt = ds.Tables[0]; 50 return dt; 51 } 52 catch (Exception exc) 53 { 54 throw exc; 55 } 56 finally 57 { 58 conn.Close(); 59 conn.Dispose(); 60 } 61 } 62 63 protected void Button1_Click(object sender, EventArgs e) 64 { 65 if (FileUpload1.HasFile == false)//HasFile用來檢查FileUpload是否有指定文件 66 { 67 Response.Write("<script>alert('請您選擇Excel文件')</script> "); 68 return;//當無文件時,返回 69 } 70 string IsXls = Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension得到文件的擴展名 71 if (IsXls != ".xlsx" || IsXls != ".xls") 72 { 73 Response.Write("<script>alert('只能夠選擇Excel文件')</script>"); 74 return;//當選擇的不是Excel文件時,返回 75 } 76 string filename = FileUpload1.FileName; //獲取Execle文件名 DateTime日期函數 77 string savePath = Server.MapPath(("uploadfiles\\") + filename);//Server.MapPath 得到虛擬服務器相對路徑 78 DataTable ds = new DataTable(); 79 FileUpload1.SaveAs(savePath); //SaveAs 將上傳的文件內容保存在服務器上 80 ds = GetExcelDatatable(savePath); //調用自定義方法 81 DataRow[] dr = ds.Select(); //定義一個DataRow數組 82 int rowsnum = ds.Rows.Count; 83 int successly = 0; 84 if (rowsnum == 0) 85 { 86 Response.Write("<script>alert('Excel表爲空表,無數據!')</script>"); //當Excel表爲空時,對用戶進行提示 87 } 88 else 89 { 90 string _Result = ""; 91 for (int i = 0; i < dr.Length; i++) 92 { 93 //前面除了你須要在創建一個「upfiles」的文件夾外,其餘的都不用管了,你只須要經過下面的方式獲取Excel的值,而後再將這些值用你的方式去插入到數據庫裏面 94 string title = dr[i]["標題"].ToString(); 95 string linkurl = dr[i]["連接地址"].ToString(); 96 string categoryname = dr[i]["分類"].ToString(); 97 string customername = dr[i]["內容摘要"].ToString(); 98 99 try 100 { 101 var uuid = Guid.NewGuid().ToString(); 102 string sql = string.Format("insert into testdb(id,title,linkurl,categoryname,customername) values('{0}','{1}','{2}','{3}','{4}')", uuid, title, linkurl, categoryname, customername); 103 int count = SqlDbHelper.ExecuteNonQuery(sql); 104 if (count > 0) 105 successly++; 106 107 } 108 catch (Exception ex) 109 { 110 _Result = _Result + ex.InnerException + "\\n\\r"; 111 } 112 } 113 if (successly == rowsnum) 114 { 115 string strmsg = "Excle表導入成功!"; 116 System.Web.HttpContext.Current.Response.Write("<Script Language='JavaScript'>window.alert('" + strmsg + "');</script>"); 117 } 118 else 119 { 120 Response.Write("<script>alert('Excle表導入失敗!');</script>"); 121 } 122 } 123 } 124 } 125 }