ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入

前言

上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出 本节演示一些比较复杂的模型场景

情景

上次的场景:(标准的Excel表格格式)

image.png

制定的场景:(指定表模的场景,多张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[1][2].Value.ToString() == "")
{
    errorMessage.Append("姓名不能为空");
}

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

   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();

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

[Go 语言社区] Golang架构底层---日志函数

服务器后台架构,日志是必不可少的一个功能模块,日志可以分为很多中:统计日志,访问日志,错误日志等 今天大家发是运行中的日志函数 // 日志函数,传入数据为字...

3336
来自专栏逸鹏说道

NetCore并发编程

示例代码:https://github.com/lotapp/BaseCode/tree/master/netcore/4_Concurrency

5174
来自专栏张善友的专栏

使用LogParser分析日志

系统运维,少不了分析系统日志,微软有个工具Log Parser可以帮助你分析日志。它功能强大,使用简单,可以分析基于文本的日志文件、XML 文件、CSV(逗号分...

4437
来自专栏蘑菇先生的技术笔记

Net作业调度(五)—quartz.net动态添加job设计

2976
来自专栏码农阿宇

EF Core下利用Mysql进行数据存储在并发访问下的数据同步问题

小故事 在开始讲这篇文章之前,我们来说一个小故事,纯素虚构(真实的存钱逻辑并非如此) 小刘发工资后,赶忙拿着现金去银行,准备把钱存起来,而与此同时,小刘的老婆刘...

3395
来自专栏Golang语言社区

关于JSON.stringify和Unicode编码,需要注意的几点

1JSON.stringify会自动把所要转换内容中的汉字转换为Unicode编码 2浏览器间有差别,个别浏览器会把将要提交表单内容中的Unicode编码自动转...

3998
来自专栏GuZhenYin

SignalR系列续集[系列6:使用自己的连接ID]

前言 老规矩,前言~,在此先道个歉,之前的1-5对很多细节问题都讲的不是很详细,也有很多人在QQ或者博客问我一些问题 所以,特开了这个续集.. - -, 讲一些...

49010
来自专栏快乐八哥

浅谈ASP.NET客户端回调

最近同学要做一个项目,需求是:音乐播放器。大致UI如图: ? 点击右边的“X”图标,可以删除当前选定的这首歌。因为现实界面的代码是复制过来的,并且前辈使用的是...

22010
来自专栏Golang语言社区

【Golang语言社区投稿】golang高并发基于协程,通道的任务池

要点: 封装了协程模型基于select模型的通道传递; 支持同步和异步添加任务;由于golang无函数指针,任务函数利用了go 反射机制支持可变参的入参 开发者...

55311
来自专栏逸鹏说道

Python3 与 C# 并发编程之~ 上篇

其实逆天现在Coding已经是80%变成Python了,20%才是Net,也不确定是否一直在Net界干下去,所以只能尽可能的在说新知识的同时,尽量把脑子里面Ne...

1284

扫码关注云+社区

领取腾讯云代金券