MVC基础操作之一:NPOI导出数据

开发工具与关键技术:VS MVC基础
作者:卢雅婷
撰写时间:2019/04/17

(代码来源于老师)
在我们工作生活中经常需要导入、导出数据,比如学生信息表格的填写,就是先下载其模板给学生填写,再进行导入数据、统计数据,如果需要用到统计表格,就需要导出,哪如何用代码编写导出数据呢?当然会要很多方法,而NPOI导出是我们最常用的方法。接下来我便和大家一起学习NPOI的导出数据。

在我们写代码之前需要先引用一个插件NPOI,NPOI是连接Excel表格与work文档关系的系统插件,我们所用的很多方法都来自于它。
首先我们要去到控制器中写方法,

  1. 第一步我们要查询我们需要导出的数据,即页面下拉框筛选查询的数据,或者是所有数据,如图下,(方法里面的参数是页面下拉框查询的字段)因为我们需要的数据来源于不同的表,所以要进行连表查询数据(Student是我们构建的实体类,里面是我们所需要的字段)

  2. 在这里插入图片描述

  3. 查询完数据后我们还要对其进行筛选,用if语句判断筛选出我们需要的数据(这个是查询的知识点,在此我并不多说,若有不懂之处可以看我上一次写的文章:MVC基础操作之一:查询数据)

  4. 接着我们要将查询出来的数据转化为对象列表的格式,(因为我们之后要把数据输入Excel表格中。),然后就是创建工作簿(HSSFWorkbook是新建工作簿的方法),再者就是创建工作表和为工作簿创建工作表并命名(考生信息便是表名)。创建好工作表后,就应该开始编写工作表。

  5. 编写工作表首先要创建表头(就是创建标题行并设置字段),第一步创建第一行,如下图所示,row1为第一行(因为第一行的坐标是(0,i),i是列数)所以创建表头时,行不变,统一用row1,而列CreateCell显示值从0开始++,SetCellValue 则显示其字段名称,以此类推,直到所要字段都完成。

  6. 在这里插入图片描述

  7. 接着创建数据行因为数据的行数是不确定的,是根据查询的条数变化而变化,所以遍历显示数据,上面查询listStu.Count()就是下面遍历循环的长度。在遍历数据前先要创建行,因为第一行已经被表头占用了所以行数要从下标为1开始(就是下面CreateRow(i+1)的原因)。然后把数据遍历到表格中。

在这里插入图片描述
在这里插入图片描述

  1. 为了防止文件名重复造成的影响,在此把文件重新命名(就是在文件名的基础上加上当前的时间,而且是上图的时间格式,再加上文件的格式,上图是.xls)。
  2. 然后要将Excel表格转化为流,输出。在创建文件流(bookStream)前,先引用IO流插件。再将文件写入流(向流中写入字节序列),在我们输出之前调用Seek(偏移量,游标位置) 把0位置指定为开始位置,最后向页面返回数据,第一个参数是返回的数据,第二个文件类型,第三个是文件名。
    在这里插入图片描述

接着我们回到页面执行导出操作
10. 首先新建一个执行方法,在方法里声明一个变量接收下面的数据,提取查询条件获取到当前table的条件,因为数据数量的不确定性,我们使用for in 循环遍历语句,(将所有的数据都以&+key=’相对应的值’形式显示)是为了拿查询的条件跟导出的条件进行比较(必须相等)tabStudent.config.where是我们之前就从控制器传过来的查询的数据。

  1. 然后获取当前导出的条件并判断获取值是否为空或者为undefined,是则让其值等于0,否则,将其数据以之前查询的数据一样的形式拼接且用if else语句判断其是否相等(就是下图的strSeachWhere == strTemp为条件),
    若为true则弹出提示框:你确定要导出i条学生信息?(i为tabStudent.config.page.count条),若点击是则关闭提示框,新标签页打开下载excel的url,下载excel文件,
    因为strTemp的下标为0时是&,所以要从下标为1处获取。若为false提示:请查询出要导出的数据!
    在这里插入图片描述

,鄙人学之尚浅如有不对之处,请给予矫正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值