NPOI导出
导出的方法有很多种,下面介绍的是NPOI导出。若是想使用NPOI导出,就必须借用NPOI插件
这个插件和普通的插件不一样,因为这是配置插件。所以放在bin文件里面。它的作用就是把项目跟Microsoft Excel工作表连接。我们要通过代码来创造在Excel表格中的行和列。代码大概的流程:1.将要查询的数据查询出来。2. 将查询出来的数据转化为对象列表的格式。3. 创建工作簿、创建工作、编写工作表。4. 为工作簿创建工作表并命名。5. 表头、创建标题行并设置字段、创建第一行。
6. 创建列、创建行并赋值。7.文件命名。8. 将Excel表格转化为流,输出。创建文件流。9. 文件写入流(向流中写入字节序列)。10. 输出之前调用Seek(偏移量,游标位置) 把0位置指定为开始位置。
下面是第一步开始的代码:
public ActionResult ExportToExcel(int AcademeID, int GradeID, int ClassID, string StudentInfo)
{
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//班级表
orderby tbStudent.studentID
descending
select new Student//构建的实体类
{
studentID = tbStudent.studentID,//学生ID
UserID = tbStudent.UserID,//用户ID
StudentNumber =tbStudent.StudentNumber,//学号
StudentName = tbStudent.StudentName,//姓名
StudentIDNum = tbStudent.StudentIDNum,//身份证号
StudentSex = tbStudent.StudentSex,//性别
AcademeName = tbAcademe.AcademeName,//学院
SpecialtyName = tbSpcialty.SpecialtyName,//专业
GradeName = tbGrade.GradeName,//年级
ClassName = tbClass.ClassName,//班级
UserNuber = tbUser.UserNuber,//账号
AcademeID =tbStudent.AcademeID,//学院ID
SpecialtyID = tbStudent.SpecialtyID,//专业ID
GradeID = tbStudent.GradeID,//年级ID
ClassID = tbStudent.ClassID//班级ID
};
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));
}
//将查询出来的数据转化为对象列表的格式
List<Student> listExaminee = listStu.ToList();
//创建工作簿、创建工作、编写工作表
HSSFWorkbook excelBook = new HSSFWorkbook();
//为工作簿创建工作表并命名
NPOI.SS.UserModel.ISheet sheet1 =excelBook.CreateSheet("考生信息");
//表头、创建标题行并设置字段、创建第一行
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
//创建9列并赋值
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("账号");
//表格的数据 ;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);
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);
}
//文件名
var fileName = "考生信息" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-ffff") + ".xls";
//将Excel表格转化为流,输出
//创建文件流
MemoryStream bookStream = new MemoryStream();
//文件写入流(向流中写入字节序列)
excelBook.Write(bookStream);
//输出之前调用Seek(偏移量,游标位置) 把0位置指定为开始位置
bookStream.Seek(0, SeekOrigin.Begin);
return File(bookStream, "application/vnd.ms-excel", fileName);
}
而在视图里,一直都是使用键值的形式来匹配:
where: {
AcademeID: AcademeID,
GradeID: GradeID,
ClassID: ClassID,
StudentInfo: StudentInfo,
}
就不能用键值的形式。要自行进行拼接:
var strSeachWhere = "";
for (var key in tabStudent.config.where) {
strSeachWhere += '&' + key + '=' + tabStudent.config.where[key];
//转化为字符串
var strTemp = '&AcademeID=' + AcademeID + '&GradeID=' + GradeID + '&ClassID=' + ClassID + '&StudentInfo=' + StudentInfo;
//拿查询的条件跟导出的条件进行比较(必须相等) //获取当前导出的条件
var AcademeID = $("#searchAcademeID").val();
if (AcademeID == "" || AcademeID == undefined) {
AcademeID = 0;
}
var GradeID = $("#searchGradeID").val();
if (GradeID == "" || GradeID == undefined) {
GradeID = 0;
}
var ClassID = $("#searchClassID").val();
if (ClassID == "" || ClassID == undefined) {
ClassID = 0;
}
var StudentInfo = $("#searchStudentNumber").val();
if (StudentInfo == undefined) {
各个条件都符合后,然后进行提交:
if (strSeachWhere == strTemp) {
layer.confirm('您确定要导出' +tabStudent.config.page.count + '条学生信息?',
{ icon: 3, titile: "提示" }, function (index) {
layer.close(index);//关闭提示框
//新标签页打开下载excel的url,下载excel文件
window.open('/ExaminationManagement/SetExaminee/ExportToExcel?' +
strTemp.substring(1, strTemp.length));
});
}
else {
layer.msg("请查询出要导出的数据!", { icon: 0, skin: "layui-layer-molv" });
}
}
提交成功的话,将会成功导出所查询出来的数据: