数据的导出
是不是可以说一个系统如果没有数据导出这个功能就不是一个好系统呢,既然数据导出显得这么重要,那你们知道多少种导出方法呢。我现在就来讲讲我的数据导出方法,显得有点简单哦。声明一个新的空变量,接着一个for循环把学生表内的数据分别捆绑到这个新的变量中来。然后获取到页面上的下拉框、文本框内的数据并且判断是否为空,如果是空就要把它的ID和内容设置为0或空。
接着把获取到的分别对应连接起来。再与上面for循环后的strSeachWhere作对比。如果相等就弹出询问框让用户再次确认是否导出。不相等就弹出提示框提醒对方选择数据。将获取到的要导出的数量放置在询问框内结合文字令用户明确自己选择了多少条数据进行导出。若是用户确认了就打开一个新的选择窗口供用户选择导出的数据存放在哪里,并且提交数据请求。
控制器这边一进来就先是一个多条件的多表查询,对学生表、学院表、用户表等共六个表进行查询出将要导出的内容,查询出来后倒叙排序再对查询的数据进行下一步的条件筛选操作。
var listStu = from tbStudent in myModels.PW_Student
join tbAcademe in myModels.SYS_Academe on tbStudent.AcademeID
equals tbAcademe.AcademeID
join tbSpcialty in myModels.SYS_Specialty on tbStudent.SpecialtyID
equals tbSpcialty.SpecialtyID
join tbGrade in myModels.SYS_Grade on tbStudent.GradeID
equals tbGrade.GradeID
join tbClass in myModels.SYS_Class on tbStudent.ClassID
equals tbClass.ClassID
join tbUser in myModels.PW_User on tbStudent.UserID
equals tbUser.UserID
orderby tbStudent.studentID descending
此处省略查询的字段……
if (AcademeID > 0)
{
listStu = listStu.Where(m => m.AcademeID == AcademeID);
}
if (GradeID > 0)
{
listStu = listStu.Where(m => m.GradeID == GradeID);
}
if (ClassID > 0)
{
listStu = listStu.Where(m => m.ClassID == ClassID);
}
if (!string.IsNullOrEmpty(StudentInfo))
{
listStu = listStu.Where(m => m.StudentNumber.Contains(StudentInfo)
|| m.StudentName.Contains(StudentInfo));
}
既然是要导出那么就转化为内容格式都适合导出的数据形式。接着就是创建工作簿了,数据导出一般都是用Excel表格的嘛。工作簿建好就在工作簿内创建工作表并且给这个工作表命名。
然后创建标题行并且设置导出的字段,所谓的标题行就是第一行表头嘛。然后创建九列并且给这九列赋值。
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“学号”);
row1.CreateCell(1).SetCellValue(“姓名”);
row1.CreateCell(2).SetCellValue(“身份证号”);
row1.CreateCell(3).SetCellValue(“性别”);
row1.CreateCell(4).SetCellValue(“学院”);
row1.CreateCell(5).SetCellValue(“专业”);
row1.CreateCell(6).SetCellValue(“年级”);
row1.CreateCell(7).SetCellValue(“班级”);
row1.CreateCell(8).SetCellValue(“账号”);
接着就是数据行了,创建了表头就要有数据的嘛,下面就对对应的单元格进行赋值,数据很多,而且有很多不确定性,就是不确定用户会选多少条数据和选哪条数据。用for循环对选择到的数据进行对应的建行和赋值。
for (int i = 0; i < listStu.Count(); i++)
{
NPOI.SS.UserModel.IRow rowTemp = sheet1.CreateRow(i + 1);
rowTemp.CreateCell(0).SetCellValue(listExaminee[i].StudentNumber);
rowTemp.CreateCell(1).SetCellValue(listExaminee[i].StudentName);
rowTemp.CreateCell(2).SetCellValue(listExaminee[i].StudentIDNum);
rowTemp.CreateCell(3).SetCellValue(listExaminee[i].StudentSex);
rowTemp.CreateCell(4).SetCellValue(listExaminee[i].AcademeName);
rowTemp.CreateCell(5).SetCellValue(listExaminee[i].SpecialtyName);
rowTemp.CreateCell(6).SetCellValue(listExaminee[i].GradeName);
rowTemp.CreateCell(7).SetCellValue(listExaminee[i].ClassName);
rowTemp.CreateCell(8).SetCellValue(listExaminee[i].UserNuber);
}
接下来的内容就简单多了。首先新建一个文件名称,至于为什么加上日期时间呢,是因为防止文件名称相同引起不必有的麻烦,时间不会重复所以用时间作为文件名就绝对不会出现重复的可能了啊,我们还要确定这个文件的后缀是为xls的。接下来我们就要将Excel表格转化为流输出了。先创建好文件流,接着将文件写入文件流中(向文件流中写入字节序列),将当前流中的位置设置为指定值,就是在输出之前调用Seek(偏移量,游标位置)把0位置指定为开始位置。再把这些通通返回回去。这次的导出内容就只能讲到这里了。
var fileName = “考生信息” + DateTime.Now.ToString
(“yyyy-MM-dd-HH-mm-ss-ffff”) + “.xls”;
MemoryStream bookStream = new MemoryStream();
excelBook.Write(bookStream); 文件写入文件流中
bookStream.Seek(0, SeekOrigin.Begin);
return File(bookStream, “application/vnd.ms-excel”, fileName);
数据的导出
是不是可以说一个系统如果没有数据导出这个功能就不是一个好系统呢,既然数据导出显得这么重要,那你们知道多少种导出方法呢。我现在就来讲讲我的数据导出方法,显得有点简单哦。声明一个新的空变量,接着一个for循环把学生表内的数据分别捆绑到这个新的变量中来。然后获取到页面上的下拉框、文本框内的数据并且判断是否为空,如果是空就要把它的ID和内容设置为0或空。
接着把获取到的分别对应连接起来。再与上面for循环后的strSeachWhere作对比。如果相等就弹出询问框让用户再次确认是否导出。不相等就弹出提示框提醒对方选择数据。将获取到的要导出的数量放置在询问框内结合文字令用户明确自己选择了多少条数据进行导出。若是用户确认了就打开一个新的选择窗口供用户选择导出的数据存放在哪里,并且提交数据请求。
控制器这边一进来就先是一个多条件的多表查询,对学生表、学院表、用户表等共六个表进行查询出将要导出的内容,查询出来后倒叙排序再对查询的数据进行下一步的条件筛选操作。
var listStu = from tbStudent in myModels.PW_Student
join tbAcademe in myModels.SYS_Academe on tbStudent.AcademeID
equals tbAcademe.AcademeID
join tbSpcialty in myModels.SYS_Specialty on tbStudent.SpecialtyID
equals tbSpcialty.SpecialtyID
join tbGrade in myModels.SYS_Grade on tbStudent.GradeID
equals tbGrade.GradeID
join tbClass in myModels.SYS_Class on tbStudent.ClassID
equals tbClass.ClassID
join tbUser in myModels.PW_User on tbStudent.UserID
equals tbUser.UserID
orderby tbStudent.studentID descending
此处省略查询的字段……
if (AcademeID > 0)
{
listStu = listStu.Where(m => m.AcademeID == AcademeID);
}
if (GradeID > 0)
{
listStu = listStu.Where(m => m.GradeID == GradeID);
}
if (ClassID > 0)
{
listStu = listStu.Where(m => m.ClassID == ClassID);
}
if (!string.IsNullOrEmpty(StudentInfo))
{
listStu = listStu.Where(m => m.StudentNumber.Contains(StudentInfo)
|| m.StudentName.Contains(StudentInfo));
}
既然是要导出那么就转化为内容格式都适合导出的数据形式。接着就是创建工作簿了,数据导出一般都是用Excel表格的嘛。工作簿建好就在工作簿内创建工作表并且给这个工作表命名。
然后创建标题行并且设置导出的字段,所谓的标题行就是第一行表头嘛。然后创建九列并且给这九列赋值。
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“学号”);
row1.CreateCell(1).SetCellValue(“姓名”);
row1.CreateCell(2).SetCellValue(“身份证号”);
row1.CreateCell(3).SetCellValue(“性别”);
row1.CreateCell(4).SetCellValue(“学院”);
row1.CreateCell(5).SetCellValue(“专业”);
row1.CreateCell(6).SetCellValue(“年级”);
row1.CreateCell(7).SetCellValue(“班级”);
row1.CreateCell(8).SetCellValue(“账号”);
接着就是数据行了,创建了表头就要有数据的嘛,下面就对对应的单元格进行赋值,数据很多,而且有很多不确定性,就是不确定用户会选多少条数据和选哪条数据。用for循环对选择到的数据进行对应的建行和赋值。
for (int i = 0; i < listStu.Count(); i++)
{
NPOI.SS.UserModel.IRow rowTemp = sheet1.CreateRow(i + 1);
rowTemp.CreateCell(0).SetCellValue(listExaminee[i].StudentNumber);
rowTemp.CreateCell(1).SetCellValue(listExaminee[i].StudentName);
rowTemp.CreateCell(2).SetCellValue(listExaminee[i].StudentIDNum);
rowTemp.CreateCell(3).SetCellValue(listExaminee[i].StudentSex);
rowTemp.CreateCell(4).SetCellValue(listExaminee[i].AcademeName);
rowTemp.CreateCell(5).SetCellValue(listExaminee[i].SpecialtyName);
rowTemp.CreateCell(6).SetCellValue(listExaminee[i].GradeName);
rowTemp.CreateCell(7).SetCellValue(listExaminee[i].ClassName);
rowTemp.CreateCell(8).SetCellValue(listExaminee[i].UserNuber);
}
接下来的内容就简单多了。首先新建一个文件名称,至于为什么加上日期时间呢,是因为防止文件名称相同引起不必有的麻烦,时间不会重复所以用时间作为文件名就绝对不会出现重复的可能了啊,我们还要确定这个文件的后缀是为xls的。接下来我们就要将Excel表格转化为流输出了。先创建好文件流,接着将文件写入文件流中(向文件流中写入字节序列),将当前流中的位置设置为指定值,就是在输出之前调用Seek(偏移量,游标位置)把0位置指定为开始位置。再把这些通通返回回去。这次的导出内容就只能讲到这里了。
var fileName = “考生信息” + DateTime.Now.ToString
(“yyyy-MM-dd-HH-mm-ss-ffff”) + “.xls”;
MemoryStream bookStream = new MemoryStream();
excelBook.Write(bookStream); 文件写入文件流中
bookStream.Seek(0, SeekOrigin.Begin);
return File(bookStream, “application/vnd.ms-excel”, fileName);
发布评论