上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操做,你们能够跳转到上一节查看:javascript
ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出css
本节演示一些比较复杂的模型场景html
上次的场景:(标准的Excel表格格式)java
制定的场景:(指定表模的场景,多张sheet,不是横排的形式)数据库
实现思路:利用LinqToExcel循环读取Sheet,再循环读取Sheet指定单元格的内容数组
(其实Excel是一个二维数组,能够直接读取诸如:B1:C1的单元格数据)ide
上次的代码咱们已经有了上传Excel功能,此次就不须要放出上传代码了。post
在业务层添加校验Excel的方法:能够效仿上次的普通导入url
public bool CheckImportBatchData(string fileName, List<Spl_PersonModel> personList, ref ValidationErrors errors)
头部分一样保持不变:spa
var targetFile = new FileInfo(fileName); if (!targetFile.Exists) { errors.Add("导入的数据文件不存在"); return false; } var excelFile = new ExcelQueryFactory(fileName);
下面是核心代码:
var sheetList = excelFile.GetWorksheetNames();//IEnumberable
因为其返回类型是IEnumberable全部咱们直接一个foreach就全出来了
foreach (var sheet in sheetList) { //得到sheet对应的数据 var data = excelFile.WorksheetNoHeader(sheet).ToList(); }
视乎到这一步都很简单了!接下来咱们只要分解data的数据便可,通过跟踪data是一个二维数据
好了,如今更加清晰了,我要得到光头强两个字。那么只须要data[2][3]就能够了
//判断信息是否齐全 if (data[1][2].Value.ToString() == "") { errorMessage.Append("姓名不能为空"); }
var person = new Spl_PersonModel(); person.Id = ""; person.Name = data[1][2].Value.ToString(); person.Sex = data[2][2].Value.ToString(); person.Age = Convert.ToInt32(data[3][2].Value); person.IDCard = data[4][2].Value.ToString(); person.Phone = data[5][2].Value.ToString(); person.Email = data[6][2].Value.ToString(); person.Address = data[7][2].Value.ToString(); person.Region = data[8][2].Value.ToString(); person.Category = data[9][2].Value.ToString();
仍是 public void SaveImportData(IEnumerable<Spl_PersonModel> personList)方法
效果仍是同样的
若是有时候你的文件处理的逻辑不少,时间好几秒,那么你可能须要加个进度提示
简单的loading代码以下:(开始导入时候调用,结束的时候关闭。)
<div id="over" class="over"></div>
<div id="layout" class="layout"><img src="~/Content/images/loading.gif" /></div>
<script type="text/javascript">
function showLoading() {
$("#over").show(); $("#layout").show(); } function hideLoading() { $("#over").hide(); $("#layout").hide(); } </script> <style type="text/css"> .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} </style>
效果以下:
有时候咱们的表模就是这样的,并非都是列表形式,这是,这个方法就帮到我你,简单粗暴
下载代码:动手体验一下,稳固知识
连接:http://pan.baidu.com/s/1i48Lg8l 密码:vq0g