导出数据到Excel表格
导出数据到Excel表格
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:Visual Studio
作者:黄海浪
撰写时间:2019年5月17日
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
将数据导出到Excel表格要通过查询条件查询筛选数据,然后创建工作表,工作簿,设计表头,写入数据
控制器代码
public ActionResult ExportStudentAchievement(int AcademeID, int GradeID, int ClassID){
var listAchievement = from tbAchievement in myModels.PW_Achievement
group tbAchievement by tbAchievement.UserID into tbStudent
select new{
UserID = tbStudent.Key,
AchievementID = tbStudent.OrderByDescending(m => m.Achievement).FirstOrDefault().AchievementID,
Achievement = tbStudent.OrderByDescending(m => m.Achievement).FirstOrDefault().Achievement,
ExamNumber = tbStudent.OrderByDescending(m => m.ExamNumber).FirstOrDefault().ExamNumber,
EligibleTypeID = tbStudent.OrderByDescending(m => m.Achievement).FirstOrDefault().EligibleTypeID
};
List<AchievementVo> listResult = (from tbAchievement in listAchievement
join tbStudent in myModels.PW_Student on tbAchievement.UserID equals tbStudent.UserID
join tbClass in myModels.SYS_Class on tbStudent.ClassID equals tbClass.ClassID
join tbEligibleType in myModels.SYS_EligibleType on tbAchievement.EligibleTypeID equals tbEligibleType.EligibleTypeID
orderby tbAchievement.Achievement descending
select new AchievementVo{
StudentNumber = tbStudent.StudentNumber,//学号
StudentName = tbStudent.StudentName,//姓名
StudentSex = tbStudent.StudentSex,//性别
Class = tbClass.ClassName,//班级
Achievement = tbAchievement.Achievement,//最优成绩
EligibleType = tbEligibleType.EligibleTypeName,//合格类型
AcademeID = tbStudent.AcademeID,
GradeID = tbStudent.GradeID,
ClassID = tbStudent.ClassID
}).ToList();
//条件筛选
if (AcademeID > 0){
listResult = listResult.Where(m => m.AcademeID == AcademeID).ToList();
}
if (GradeID > 0){
listResult = listResult.Where(m => m.GradeID == GradeID).ToList();
}
if (ClassID > 0){
listResult = listResult.Where(m => m.ClassID == ClassID).ToList();
}
//1、创建工作簿
HSSFWorkbook exBook = new HSSFWorkbook();
//2、创建工作表
ISheet sheet = exBook.CreateSheet("考生成绩");
//3、设计表头
//3.1、创建表头
IRow headRow = sheet.CreateRow(0);
//3.2、设计表头字段
headRow.CreateCell(0).SetCellValue("学号");
headRow.CreateCell(1).SetCellValue("姓名");
headRow.CreateCell(2).SetCellValue("性别");
headRow.CreateCell(3).SetCellValue("班级");
headRow.CreateCell(4).SetCellValue("成绩");
headRow.CreateCell(5).SetCellValue("合格类型");
//4、写入表格数据
for (int i = 0; i < listResult.Count(); i++){
//4.1、创建行
IRow rowTemp = sheet.CreateRow(i + 1);
//4.2、写入数据
rowTemp.CreateCell(0).SetCellValue(listResult[i].StudentNumber);
rowTemp.CreateCell(1).SetCellValue(listResult[i].StudentName);
rowTemp.CreateCell(2).SetCellValue(listResult[i].StudentSex);
rowTemp.CreateCell(3).SetCellValue(listResult[i].Class);
rowTemp.CreateCell(4).SetCellValue(listResult[i].Achievement.ToString());
rowTemp.CreateCell(5).SetCellValue(listResult[i].EligibleType);
}
//5、将Excel文件转化为文件流输出
MemoryStream exStream = new MemoryStream();
exBook.Write(exStream);
//6、输出之前调用Seek(偏移量,游标位置)方法:确定流开始的位置
exStream.Seek(0, SeekOrigin.Begin);
//7、为下载的Excel文件命名
string exFileName = "学生安全教育测试成绩" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".xls";
//返回
return File(exStream, "application/vnd.ms-excel", exFileName);
}
我们看到在查询和筛选出数据之后就创建表和设计表头,然后就通过for循环一条一条的把数据录入进去,完成之后就将Excel文件转化为文件流输出,还要给它设置流开始的位置,最后为下载的Excel文件命名