原来数据可以这样导出的

本文介绍在VS中使用NPOI插件将数据导出到Excel的方法。先引入NPOI插件,在控制器查询全部数据,用NPOI创建Excel、工作表,编写表头和数据,重命名表格并转换为流输出。视图部分需判断查询条件,确定是否导出筛选数据。

导出的主要思路:先创建一个工作簿,再创建工作表,接着创建表头把数据绑定,使用IO流写出数据,最后就重命名文件。

导出肯定是要用到插件的,我们的第一步当然是引入插件啦,但是这个插件与平常的js插件不一样,它是vs的配置文件,使用引用的方法也不一样。这里所使用的插件就是NPOI,引用的方法就是先复制NPOI插件,然后找到项目的bin文件的目录下面粘贴
在这里插入图片描述

然后就在vs里面找到,并添加引用就可以啦,这样我们就可以对里面达到方法进行操作了。
在这里插入图片描述

因为导出数据不需要写页面布局,所以主要的还是控制器。

第一步,也是需要对数据查询出全部数据的,这个查询的方法和前面渲染表格的查询是一模一样的,也只是去掉了分页。

在这里插入图片描述

查询出来的数据后,就要给每一个手动地写代码添加到Excel表格里面。Excel后面的就需要做两步操作:一先做出一个表头,表头就是表的顶部那些“姓名,性别”的提示行,再把数据放入表格中。

  1. 创建Excel
    这时NPOI就派上用场了,我们要用的就是它创建Excel的功能,使用它当然就是要把它实例化先,这句代码的效果就是新建了一个Excel的表格。
HSSFWorkbook ExcelBook = new HSSFWorkbook()
  1. 创建工作表
    这个也是用到NPOI里面的一个函数ISheet,因为工资表它就是一个Sheet,后面括号里面就是给它命名的。
NPOI.SS.UserModel.ISheet sheet1 = ExcelBook.CreateSheet("学生信息");
  1. 编写工作表
    1.1 表头
    因为第一行比较特殊,所以要单独把它创建出来。
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);

并且要确认表格到底有多少列,有多少列就创建多少列,给每一个列的第一个的单元格写上提示的内容。

row1.CreateCell(0).SetCellValue("学号");
row1.CreateCell(1).SetCellValue("姓名");
row1.CreateCell(2).SetCellValue("性别");

在这里插入图片描述

表格的第一行就这样完成了,接着下面就是要把数据写到表格上面了。

3.2数据
先把查询出来的表格数据,并且要转化为列表的格式。

List<Student> listEquer = listStu.ToList();

填写表格的数据,就是用for循环给每一个单元格添加数据,数据有多少行它就会创建多少,listStu主要是用来获取总数的。因为Excel表格的第一行刚才已经创建出来了,所以填写数据的行数是从第二行开始的,它的下标是加1的。接着里面列的绑定注意序号要和上面已经创建的列对应起来,然后给它对应的行数绑定数据库需要显示的字段。

for (int i = 0; i <
listStu.Count(); i++)
            { 
NPOI.SS.UserModel.IRow rowTeta = sheet1.CreateRow(i + 1);
rowTeta.CreateCell(0).SetCellValue(listEquer[i].StudentNumber);
rowTeta.CreateCell(1).SetCellValue(listEquer[i].StudentName);
rowTeta.CreateCell(2).SetCellValue(listEquer[i].StudentSex);
            }

然后就是重命名表格,想必大家都应该知道的一点,系统同一路径下的文件名称是不能重复的,所以我们就需要给它创建一个不会重复名称的表格,这里比较简单的方法是给文件名拼接上当前的时间,接着后面拼接文件格式的类型。

var fileName = "学生信息" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-ffff") + ".xls";

文件还必须要文件流的格式读取,就先把Excel转换为流才能输出,

MemoryStream bookOrigin = new MemoryStream();
ExcelBook.Write(bookOrigin);

传输之前要确定读取的开始位置,0表示不偏移把全部数据读取。

bookOrigin.Seek(0, SeekOrigin.Begin);
最后以文件格式返回
return File(bookOrigin, "application/vnd.ms-excel", fileName);

视图部分,

  1. 先提取查询的条件,获取到当前这个table的条件,然后拿到查询出来的条件和导出的条件进行比较,判断它们如果相等,就说明查询出来的数据和导出的数据是相等的,反之,不相等就不能导出。

  2. 接着判断查询的条件是否和拼接的字符串相等,如果相等就提醒操作者,确定导出筛选出来的数据,然后打开新的页面下载Excel文件,最后执行控制器的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值