开发工具与关键技术: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文件,通过指定的路径;如果出现问题,就提示用户“请查询要导出的数据”。
那么到这里我们的导出的一个操作就完成了。