以导出员工信息资料为例
数据多的时候,不想要全部的数据导出Excel,只想导出符合我条件我需要的数据导出Excel,这个时候我们都想把数据筛选一遍再把筛选得到的数据导出Excel。筛选数据必须在前面查询数据的时候写有条件筛选查询的方法。Jacascript中导出数据到Excel的function获取当前数据的筛选条件和前面筛选查询的数据方法一样,筛选条件是根据部门ID和职位ID还有员工明细(员工明细就是员工编号和员工姓名)筛选的,判断筛选数据的部门ID职位ID是否为空或者undefined,如果为空或者undefined,那就把部门ID和职位ID赋值为零,编号和姓名是否为undefined,如果为undefined那就把编号和姓名赋值为零。询问一下是否要导出当前表格中的数据,是则根据部门ID和职位ID或编号或姓名访问控制器的方法,询问之后关闭询问框
asp.net mvc控制器的方法
接收javascript传参过来的部门ID和职位ID还有员工明细
将数据导出到Excel表格中,需要重新查询一遍数据,查询到的这些数据就导出的Excel表格当中,导出到Excel表格中的查询方法和数据查询返回到页面的显示出来看的查询方法一模一样,筛选条件也是一样要写上并且也是要和数据筛选查询返回到页面的显示出来看的数据筛选查询方法一模一样
数据重新筛选查询一遍之后,就是要创建Excel工作簿,创建工作表,创建表头行,创建工作簿、工作表还有表头行需要引用NPOI.dll
使用NPOI中的HSSFWoekbook创建一个工作博,再使用NPOI中的ISheet创建工作表并给工作表命名一个名字,然后再使用NPOI中的IRow创建表头行,索引(0)代表是工作表中的第一行
设置表头,把需要导出数据的属性给设置到表中的第一行,8个属性设置8列,索引从0开始到7,设置表头行属性的值
为Excel添加数据,导出的数据不只有一条数据,所以不能象设置表头行那样,添加数据需要for循环,循环添加数据,添加的数据不能多于查询出来的数据,在for循环中需要创建行,在进行数据添加,添加行的索引是(i+1),每添加一行数据都是在原有的数据行中+1,第一行数据也是需要+1行添加数据,因为已经创建了表头行,表头行的索引为0在第一行,所以第一行的数据需要在表头行的索引上+1,第二行才是数据的第一行。添加数据需要按照属性列把数据添加上去,索引是从零开始,工作表中没有添加第一列,所以不需要+1,而这些数据也是添加到固定的一列当中。
添加完数据后就是保存数据,保存工作表工作簿,接下来给工作簿命名一个名字,为了防止每一次导出的数据工作簿的命名都一样,所以命名工作簿的格式是:工作簿名字+当前导出的时间+Excel的后缀名。实例化一个内存流MemoryStream,把工作簿写入内存流,转化为内存流
输出之前调用Seek(偏移量,游标位置)移动文件读取指针到指定的位置,Seek(0,Seek.begin) 第一个参数表示相对位置,第二个参数表示参照位置,读取写入内存流中的工作簿
返回一个文件,文件是写入内存流中的工作簿,"application/vnd.ms-excel"是MIME文件类型,MIME文件类型(Multipurpose Internet Mail
Extensions)多用途互联网邮件扩展类型,将工作簿的命名一起返回