前提条件:
根目录下建立uploadfiles文件夹(用于保存上传的xls文件);
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 部分:
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 // 1、确保安装了Microsoft.ACE.OLEDB.12.0驱动 23 // http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe 24 // 2、在vs中右击项目--》属性--》生成 下的 目标平台 改为x86 25 // 如果以上两个方法还是不行的话,用第三个方法 26 // 3、在对应的 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 }