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 ...
随机推荐
- 札记:Fragment基础
Fragment概述 在Fragment出现之前,Activity是app中界面的基本组成单位,值得一提的是,作为四大组件之一,它是需要"注册"的.组件的特性使得一个Activit ...
- C语言 · 阶乘计算 · 基础练习
问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表 ...
- $.type 怎么精确判断对象类型的 --(源码学习2)
目标: var a = [1,2,3]; console.log(typeof a); //->object console.log($.type(a)); //->ar ...
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...
- Java 为值传递而不是引用传递
——reference Java is Pass by Value and Not Pass by Reference 其实这个问题是一个非常初级的问题,相关的概念初学者早已掌握,但是时间长了还是容易 ...
- spring boot 实战:我们的第一款开源软件
在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? 各位看官会想,我们是来看开源软件的,你给我扯什 ...
- Web开发安全之文件上传安全
很长一段时间像我这种菜鸡搞一个网站第一时间反应就是找上传,找上传.借此机会把文件上传的安全问题总结一下. 首先看一下DVWA给出的Impossible级别的完整代码: <?php if( iss ...
- GIT笔记命令行(1)
Git简单易用,只要输入git就可以列出他的所有参数 C:\Users\spu>git usage: git [--version] [--help] [-C <path>] [-c ...
- Oracle 表空间和用户权限管理
一. 表空间 Oracle数据库包含逻辑结构和物理结构. 数据库的物理结构指的是构成数据库的一组操作系统文件. 数据库的逻辑结构是指描述数据组织方式的一组逻辑概念以及它们之间的关系. 表空间是数据库逻 ...
- 初学DirectX11, 留个纪恋。
以前学的是openGL, 最近才开始学DirectX11,写了个很垃圾的代码,怀念以前的glPushMatrix(), glPopMatrix(), glBegin(), glEnd(), 多简单啊, ...
