导出

开发工具与关键技术:DW
作者:胡名权
撰写时间:2019年5月2日

由于很快会涉及到导出的使用,今天就和大家一起来说说导出的做法与步骤。关于导出其实我并不怎么清除,我就找了一些资料和大家做简单的描述。那么,我们要怎样实现导出的功能呢?它的思路是怎么样的。好了,接下来我么就一起来实现导出的操作。
首先,它的一个操作思路是:
(1).引用NPOI插件
(2)使用插件方法HSSFWorkbook创建工作薄;
(3)使用插件方法ISheet创建工作表并命名;
(4)书写工作表表头()
(5)linq查询数据list 书写到工作表;
(6)使用IO流写出数据
既然思路有了,我们就一步一步按照思路来实现。
要引入插件,我们就默认从后台引入了;就先在控制器写一个方法,把会用到的参数放进来,
然后用var 就是linq查询的方法,把数据用join连接,再让它倒叙排序,把数据查询出来。
在这里插入图片描述

因为中间数据太多,就只列出来一条作为模板,让大家知道它的写法就行。
接着就是变量的赋值:
studentID = tbStudent.studentID,//学生ID
UserID = tbStudent.UserID,//用户ID
把其中用到的两条拿来说明一下,进行这样赋值的操作。当然,我们自己写的时候就要把所有用到的数据都要列出来。
然后就是筛选需要的数据了:
在这里插入图片描述

把我们要导出的数据选好,然后从对应的表里筛选出来;
如果我们没有筛选,那么我们查询的数据就会是全部的数据。查询出的数据将会是我们要导出的某一部分。
然后就是创建工作薄:
在这里插入图片描述

将查询出来的数据转化为对象列表格式,创建工作薄,为工作薄创建工作表并命名,这里的“考生信息”,就是我们新建出来表的名称。

//创建Excel对象

  NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
 NPOI.SS.UserModel.ISheet sheet = book.CreateSheet();//创建Excel对象工作簿
 NPOI.SS.UserModel.IRow row1 = sheet.CreateRow(0);//给sheet添加第一行的头部标题

我们导出的数据,要导出两个部分,导出表头和数据,为了让用户知道这一列,并且表头就直接规定了有多少列;这一行代表的意思。

创建所用到的数据的列并赋值:
row1.CreateCell(0).SetCellValue(“学号”);
row1.CreateCell(1).SetCellValue(“姓名”);
给单元格赋值,括号里的零代表第一行,一代表第二行,“学号”,“姓名”是对每一表格的赋值。我们要查询导出需要多少条数据,就需要创建多少行,而且我们要查询的数据是有条件查询的。当我们选择其中某一学院的时候只是导出该学院的具体部分,而不是全部。为了我们查询的数据无误,就必须和我们写该页面的查询的命名一致,才能查询出数据。

数据:listStu,创建数据行:

for (int i = 0; i < listStu.Count(); i++)
    {
         //创建行
         NPOI.SS.UserModel.IRow rowTemp = sheet1.CreateRow(i + 1);
         rowTemp.CreateCell(0).SetCellValue(listExaminee[i].StudentNumber);}

我们通过for循环,自动创建剩下的每一条数据,有多少条我们就会for循环多少遍,直到把所有数据导出完为止。我们创建之所以+一,是因为我们的表头占去了第一行,所以就不是从第一行开始导出数据了,而是第二行;然后把数据导到Excel表格,把数据一个一个放入单元格,最终把数据导到单元格里。
用流文件创建行,接着是var声明文件名,将Excel表格转化为流,输出,创建文件流:
重命名Excel表格,给整个表格的命名,获取当前的时间,拼接上文件的名称和后缀,然后我们看到的这个Excel表格的名称就是“考生信息”+ 当时系统的时间+文件后缀。因为时间是不会相同的,所以我们创建的Excel表格的名称也不会相同,把名称拼接出来。
在这里插入图片描述
我们把fileName给到工作薄,才能把它作为我们工作薄的名字。因为我们的Excel表格是一个文件,所以我们要以文件的形式才能把数据传给它。将Excel表格转化成流的格式才能读取,把数据写到文件流里面去。最后把文件返回。
控制器的方法写完了,接下来就是到视图写操作了。
首先我们给导出按钮添加点击事件:
导出考生
然后用function 找到按钮名称,就能对导出进行操作了。
先提取查询数据,获取到当前table的条件:

var strSeachWhere = "";
            for (var key in tabStudent.config.where) {
                strSeachWhere += '&' + key + '=' + tabStudent.config.where[key];
            }
            console.log(strSeachWhere);

拿查询的条件跟导出的条件进行比较(必须要相等),获取当前导出的条件:

var AcademeID = $("#searchAcademeID").val();
            if (AcademeID == "" || AcademeID == undefined) {
                AcademeID = 0;
            }

判断获取的值是否等于空或者undefined,符合要求就让它等于0;
当我们点击导出按钮的时候:
在这里插入图片描述
判断用户是否需要导出数据到表格,如果用户点击的是确定,则执行关闭提示框,新标签打开下载excel的url,并下载excel文件,通过指定的路径;如果出现问题,就提示用户“请查询要导出的数据”。
那么到这里我们的导出的一个操作就完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值