ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入
系列目录
前言
上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看:
ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出
本节演示一些比较复杂的模型场景
情景
上次的场景:(标准的Excel表格格式)
制定的场景:(指定表模的场景,多张sheet,不是横排的形式)
实现
实现思路:利用LinqToExcel循环读取Sheet,再循环读取Sheet指定单元格的内容
(其实Excel是一个二维数组,可以直接读取诸如:B1:C1的单元格数据)
上次的代码我们已经有了上传Excel功能,这次就不需要放出上传代码了。
在业务层添加校验Excel的方法:可以效仿上次的普通导入
public bool CheckImportBatchData(string fileName, List<Spl_PersonModel> personList, ref ValidationErrors errors)
头部分同样保持不变:
var targetFile = new FileInfo(fileName); if (!targetFile.Exists)<br/> { errors.Add("导入的数据文件不存在");<br/> return false;<br/> } var excelFile = new ExcelQueryFactory(fileName);
下面是核心代码:
1.获得Excel所有的sheet
var sheetList = excelFile.GetWorksheetNames();//IEnumberable
由于其返回类型是IEnumberable所有我们直接一个foreach就全出来了
2.获得sheet内部的表格数据
foreach (var sheet in sheetList)<br/> {<br/> //获得sheet对应的数据<br/> var data = excelFile.WorksheetNoHeader(sheet).ToList();<br/> }
视乎到这一步都很简单了!接下来我们只要分解data的数据即可,经过跟踪data是一个二维数据
3.获得单元格内容
好了,现在更加清晰了,我要获得光头强两个字。那么只需要data[2][3]就可以了
//判断信息是否齐全<br/> if (data[][].Value.ToString() == "")<br/> {<br/> errorMessage.Append("姓名不能为空");<br/> }
4.模型校验成功后,添加到List中来,最后集合添加到数据库
var person = new Spl_PersonModel();<br/> person.Id = "";<br/> person.Name = data[][].Value.ToString();<br/> person.Sex = data[][].Value.ToString();<br/> person.Age = Convert.ToInt32(data[][].Value);<br/> person.IDCard = data[][].Value.ToString();<br/> person.Phone = data[][].Value.ToString();<br/> person.Email = data[][].Value.ToString();<br/> person.Address = data[][].Value.ToString();<br/> person.Region = data[][].Value.ToString();<br/> person.Category = data[][].Value.ToString();
5.保存数据调用简单类型的即可
还是 public void SaveImportData(IEnumerable<Spl_PersonModel> personList)方法
总结
效果还是一样的
扩展
如果有时候你的文件处理的逻辑很多,时间好几秒,那么你可能需要加个进度提示
简单的loading代码如下:(开始导入时候调用,结束的时候关闭。)
<div id="over" class="over"></div><br/> <div id="layout" class="layout"><img src="~/Content/images/loading.gif" /></div> <script type="text/javascript"><br/> function showLoading() {<br/> $("#over").show();<br/> $("#layout").show();<br/> }<br/> function hideLoading()<br/> {<br/> $("#over").hide();<br/> $("#layout").hide();<br/> }<br/> </script><br/> <style type="text/css"><br/> .over{top:0;left:0;z-index:9999999;width:100%;height:100%;opacity:.5}.layout,.over{position:absolute;display:none}.layout{top:40%;left:40%;z-index:100000000;width:20%;height:20%;text-align:center}<br/> </style>
效果如下:
有时候我们的表模就是这样的,并不是都是列表形式,这是,这个方法就帮到我你,简单粗暴
下载代码:动手体验一下,稳固知识
转发申明:
本文转自互联网,由小站整理并发布,在于分享相关技术和知识。版权归原作者所有,如有侵权,请联系本站 邮箱 top8488@163.com,将在24小时内删除。谢谢