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)
{
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导入和导出-自定义表模导入的更多相关文章
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(44)-工作流设计-设计表单
系列目录 设计表单是比较复杂的一步,完成一个表单的设计其实很漫长,主要分为四步. 开始之前先说说表的结构. 其实表Flow_Form与Flow_FormContent设计是有一个缺陷的.我总共是设置最 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)
开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 任务调度系统界面 http: ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(转)
开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 日程管理 http://ww ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统-WebApi的用法与调试
1:ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-WebApi与Unity注入 使用Unity是为了使用我们后台的BLL和DAL层 2:ASP.NET MVC5+EF6+Easy ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(51)-系统升级
系统很久没有更新内容了,期待已久的更新在今天发布了,最近花了2个月的时间每天一点点,从原有系统 MVC4+EF5+UNITY2.X+Quartz 2.0+easyui 1.3.4无缝接入 MVC5+E ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构
系列目录 前言:这是对本文系统一次重要的革新,很久就想要重构数据访问层了,数据访问层重复代码太多.主要集中增删该查每个模块都有,所以本次是为封装相同接口方法 如果你想了解怎么重构普通的接口DAL层请查 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(34)-文章发布系统①-简要分析
系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与,虽然有点没有目的的学习,但还是了解了Andro ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(54)-工作流设计-所有流程监控
系列目录 先补充一个平面化登陆页面代码,自己更换喜欢的颜色背景 @using Apps.Common; @{ Layout = null; } <!DOCTYPE html> <ht ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox
系列目录 https://yunpan.cn/cZVeSJ33XSHKZ 访问密码 0fc2 今天整合lightbox插件Fancybox1.3.4,发现1.3.4版本太老了.而目前easyui 1 ...
随机推荐
- 从RPC开始(一)
这是一篇关于纯C++RPC框架的文章.所以,我们先看看,我们有什么? 1.一个什么都能干的C++.(前提是,你什么都干了) 2.原始的Socket接口,还是C API.还得自己去二次封装... 3.C ...
- HTML5 语义元素(二)文本内容
上一篇介绍的是关于页面结构方面的语义元素,本篇介绍文本内容方面,包含:<bdi>.<details>.<summary>.<mark>.<outp ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-WebApi与Unity注入
系列目录 前言: 有时候我们系统需要开放数据给手机App端或其他移动设备,不得不说Asp.net WebApi是目前首选 本节记录Asp.net MVC WebApi怎么利用Unity注入.系列开头已 ...
- 学习ASP.NET Core, 怎能不了解请求处理管道[5]: 中间件注册可以除了可以使用Startup之外,还可以选择StartupFilter
中间件的注册除了可以借助Startup对象(DelegateStartup或者ConventionBasedStartup)来完成之外,也可以利用另一个叫做StartupFilter的对象来实现.所谓 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- OpenCV人脸识别LBPH算法源码分析
1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...
- PHP 获取 特定时间范围 类
目录 前序 用途 功能及事项 使用方法 代码及注释 前序: 总体来说,我更应该是一个 android 移动开发者,而不是一个 phper,如果说只做移动端的 APP ,我也不会学这么多,这 2年来, ...
- canvas与html5实现视频截图功能
这段时间一直在研究canvas,突发奇想想做一个可以截屏视频的功能,然后把图片拉去做表情包,哈哈哈哈哈哈~~ 制作方法: 1.在页面中加载视频 在使用canvas制作这个截图功能时,首先必须保证页面上 ...
- asp.net mvc 验证码
效果图 验证码类 namespace QJW.VerifyCode { //用法: //public FileContentResult CreateValidate() //{ // Validat ...
- 设计模式C#合集--抽象工厂模式
抽象工厂,名字就告诉你是抽象的了.上代码. public interface BMW { public void Drive(); } public class BMW730 : BMW { publ ...
