这里的这个功能实现在WebForm很好实现,上传阶段简单的一个FileUoLoad控件就搞定了,什么取值,什么上传都是浮云,微软都帮我们封装好了,我们只需要一拖一拽就OK了,但这些在MVC中是不行的! MVC实现了显示和控制的分离就不可能再使用服务端控件了,所以我们就又回到了原始的表单提交,AJAX异步提交数据什么的,不多说直接上代码,简单的写一下 View: <form id="form" name="form" enctype="multipart/form-data" method="post" action="/DataInfoAndCal/Cal"> <input type="file" name="fileName" /> <input name="info" type="submit" value="http://www.cnblogs.com/a164266729/p/导 入" class="bt_bg" /> </form> 在控制器中接受选中的文件 可以这样子: HttpPostedFileBase fb = Request.Files[0]; string fileName = fb.FileName; //获取到文件名 xx.xls fb.SaveAs(Server.MapPath("~/App_Data/Excel/Model.xls")); 判断什么的都是浮云就不写上去了 好了上传成功,注意 <input type="file" name="fileName" />这个标签使用 HttpPostedFileBase fb = Request.Files[0];在Chome浏览器下只能够获得文件名称而不能够获得完整路径 这个问题还没解决 好的下一步将Excel转换为DataSet数据集,这个在这里就好WebForm没什么区别了 直接上代码 DataSet dsCal = new DataSet(); dsCal = GetDataSet(fb.FileName); //下面是方法 #region EXCEL数据转换DataSet /// <summary> /// EXCEL数据转换DataSet /// </summary> /// <param name="filePath">文件路径</param> /// <param name="search">表名</param> /// <returns></returns> protected DataSet GetDataSet(string filePath) { string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("~/App_Data/Excel/Model.xls") + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';"; OleDbConnection objConn = null; objConn = new OleDbConnection(strConn); objConn.Open(); DataSet ds = new DataSet(); List<string> List = new List<string> { }; DataTable dtSheetName = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); foreach (DataRow dr in dtSheetName.Rows) { if (dr["Table_Name"].ToString().Contains("$") && !dr[2].ToString().EndsWith("$")) { continue; } string s = dr["Table_Name"].ToString(); List.Add(s); } try { for (int i = 0; i < List.Count; i++) { ds.Tables.Add(List[i]); string SheetName = List[i]; string strSql = "select * from [" + SheetName + "]"; OleDbDataAdapter odbcCSVDataAdapter = new OleDbDataAdapter(strSql, objConn); DataTable dt = ds.Tables[i]; odbcCSVDataAdapter.Fill(dt); } objConn.Close(); return ds; } catch (Exception ex) { return null; } } #endregion 这里面注意取到的Excel的表名的集合可能会有不是$结束的,这是由Excel内部处理导致的 直接筛选下就OK了 顺利的完成Excel的导入上转换 存入数据库等做完再写 番外话:毕业一年来第一次在博客园里面写东西,感觉记录下成长的脚印是件很开心的事情 |