在一个项目中会记录着很多数据,这些数据呈现出的样子一般都是以表格形式显示的,采用的是我们平时使用的Excel样式,能更直观的查看某一个学生或者说是一件商品的具体信息,而这些数据确实能以Excel格式导出。
比如说一个学校的系统,它里面记录着大量的学生数据,包括学生的信息等等,那我就将考生信息导出到一个Excel表格中。
首先分析一下流程,要导入的是学生的这些信息,那么一开始肯定要查询出这些数据,然后将这些数据录入到Excel表格中。下面将讲解具体的步骤。
一、查询考生数据
先创建一个控制器,同时传入参数学院ID,年级ID,班级ID,要查询考生信息所需要的数据要涉及到几张表的数据进行连表查询,查询出所需要的字段(学号,姓名,身份证号,性别,学院,专业,年级,班级,账号)然后返回一个ToList(),将数据用一个相同数据类型的变量接收(List listStudent)。
查询所需要的字段是其一,同时还需要查询出学院、专业、年级、班级和学生的ID,因为要判断是否有数据上传过来可以直接通过ID来判断,判断学院、年级和班级ID是否大于0,大于0代表有数据,并筛选出是学院年级班级ID都相同的数据(导出的数据是通过这三个条件进行筛选出的数据)。
二、创建并导出Excel数据
查询出所有需要的字段后便要创建一个Excel表格,然后将查询的考生数据写入表格中。
创建一个Excel表格首先通过NPOI.HSSF.UserModel.HSSFWorkbook创建出一个Excel的对象(book),然后再通过NPOI.SS.UserModel.ISheet创建出一个Excel对象的工作薄(sheet)
这样就顺利的创建了一个Excel的表格了,然后就要开始录入数据,录入的数据是通过连表查询出的具体数据,并不能将表头录入,所以表头部分需要自行录入。
通过NPOI.SS.UserModel.IRow在工作薄(sheet)中添加第一行的头部标题索引为0,同时选择到第一行每一列的第一格录入标题的具体数据。
在设置指定单元格数据的同时还可以设置单元格的宽度,比如说是身份证号码,家庭住址什么的这些资料显示比较长,如果不设置具体宽度,在第一时间审阅效果就不能直接看到所有的数据,还需要手动调节比较麻烦,针对这个问题便在一开始设计时就调整合适的宽度,便于审阅。
一般导出的数据肯定不止一条,在录入数据时不可能直接手动录入,而是用for循环(循环的对象是一个数组形式)。
循环遍历之前查询出的所有考生,然后NPOI.SS.UserModel.IRow创建出一行,并将索引加i从而达到有多少条数据就增加多少行的效果。判断每一条考生数据中的每一个字段是否为空(listStudent[i].字段),如果为空则填入的Value值为0,不为空则将每一条数据的每一个字段的Value值填写在自己指定的哪一行中指定的位置。
在输出时还需要给该Excel文件命名。创建一个变量,用字符串拼接的方法拼接出该文件的名称:考生信息+当前时间+Excel文件类型。
接下来就要将这个处理完成的工作薄写入文件流,然后将它读取出来。先定义一个文件流,然后将工作薄(book)用Write()方法写如文件流中,再在定义的文件流中用Seek()方法从文件流的头部位置开始读取,将文件读取出来。
最后用return file将文件以Excel格式返回。
导出Excel数据
最新推荐文章于 2024-09-23 00:00:02 发布