系列目录

前言

上一节使用了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)
{ errors.Add("导入的数据文件不存在");
return false;
} var excelFile = new ExcelQueryFactory(fileName);

下面是核心代码:

1.获得Excel所有的sheet

var sheetList = excelFile.GetWorksheetNames();//IEnumberable

由于其返回类型是IEnumberable所有我们直接一个foreach就全出来了

2.获得sheet内部的表格数据

foreach (var sheet in sheetList)
{
//获得sheet对应的数据
var data = excelFile.WorksheetNoHeader(sheet).ToList();
}

视乎到这一步都很简单了!接下来我们只要分解data的数据即可,经过跟踪data是一个二维数据

3.获得单元格内容

好了,现在更加清晰了,我要获得光头强两个字。那么只需要data[2][3]就可以了

//判断信息是否齐全
if (data[][].Value.ToString() == "")
{
errorMessage.Append("姓名不能为空");
}

4.模型校验成功后,添加到List中来,最后集合添加到数据库

   var person = new Spl_PersonModel();
person.Id = "";
person.Name = data[][].Value.ToString();
person.Sex = data[][].Value.ToString();
person.Age = Convert.ToInt32(data[][].Value);
person.IDCard = data[][].Value.ToString();
person.Phone = data[][].Value.ToString();
person.Email = data[][].Value.ToString();
person.Address = data[][].Value.ToString();
person.Region = data[][].Value.ToString();
person.Category = data[][].Value.ToString();

5.保存数据调用简单类型的即可

还是 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

ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入的更多相关文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(44)-工作流设计-设计表单

    系列目录 设计表单是比较复杂的一步,完成一个表单的设计其实很漫长,主要分为四步. 开始之前先说说表的结构. 其实表Flow_Form与Flow_FormContent设计是有一个缺陷的.我总共是设置最 ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库  您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB  升级后界面效果如下: 任务调度系统界面 http: ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(转)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 日程管理   http://ww ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统-WebApi的用法与调试

    1:ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-WebApi与Unity注入 使用Unity是为了使用我们后台的BLL和DAL层 2:ASP.NET MVC5+EF6+Easy ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(51)-系统升级

    系统很久没有更新内容了,期待已久的更新在今天发布了,最近花了2个月的时间每天一点点,从原有系统 MVC4+EF5+UNITY2.X+Quartz 2.0+easyui 1.3.4无缝接入 MVC5+E ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构

    系列目录 前言:这是对本文系统一次重要的革新,很久就想要重构数据访问层了,数据访问层重复代码太多.主要集中增删该查每个模块都有,所以本次是为封装相同接口方法 如果你想了解怎么重构普通的接口DAL层请查 ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(34)-文章发布系统①-简要分析

    系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与,虽然有点没有目的的学习,但还是了解了Andro ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(54)-工作流设计-所有流程监控

    系列目录 先补充一个平面化登陆页面代码,自己更换喜欢的颜色背景 @using Apps.Common; @{ Layout = null; } <!DOCTYPE html> <ht ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox

    系列目录 https://yunpan.cn/cZVeSJ33XSHKZ  访问密码 0fc2 今天整合lightbox插件Fancybox1.3.4,发现1.3.4版本太老了.而目前easyui 1 ...

随机推荐

  1. Android UI体验之全屏沉浸式透明状态栏效果

    前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...

  2. 一看就懂的ReactJs入门教程-精华版

    现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...

  3. C# 破解 Reflector8.5

    一.分析 破解.net .dll,可以使用reflector,但官方提供的reflector是需要购买的,因此,破解reflector势在必行. 二.破解Reflector具体步骤 下面为详细的破解步 ...

  4. HTML 事件(二) 事件的注册与注销

    本篇主要介绍HTML元素事件的注册.注销的方式. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流.事件委托 4. ...

  5. 利用for循环找出1000以内的质数

    var n=0; for(var i=2;i<=1000;i++){  var zhishu=true;  for(var j=2;j<i;j++){    if(i%j==0){    ...

  6. SQLServer2005创建定时作业任务

    SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...

  7. ORACLE分区表梳理系列(二)- 分区表日常维护及注意事项(红字需要留意)

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  8. 萌新笔记——linux下查看内存的使用情况

    windows上有各种软件可以进行"一键加速"之类的操作,释放掉一些内存(虽然我暂时不知道是怎么办到的,有待后续学习).而任务管理器也可以很方便地查看各进程使用的内存情况,如下图: ...

  9. JS案例之2——cycle元素轮播

    元素轮播效果是页面中经常会使用的一种效果.这个例子实现了通过元素的隐藏和显示来表现轮播效果.效果比较简单. 效果图如下: 源代码如下: <!DOCTYPE html> <html&g ...

  10. JAVA代码验证身份证信息

    java验证身份证信息代码 转自:http://www.blogjava.net/xylz/archive/2011/01/05/342330.html import java.util.Calend ...