打印水晶报表的导出

博客介绍了学生成绩数据的查询、筛选及导出到Excel的方法。使用Linq进行分组查询获取用户最高成绩信息,通过条件筛选数据,然后创建Excel工作簿和工作表,设计表头并写入数据,最后将Excel文件转化为流输出并命名下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发工具与关键技术:Visual Studio 和  ASP.NET.MVC,
作者:陈鸿鹏
撰写时间:2019年  5月14日

首先呢就是数据查询&筛选查询照样是那个查询,筛选照样是那个筛选只要获取的数据对了就行了就不多说了。
public ActionResult ExportStudentAchievement(int AcademeID, int GradeID, int ClassID)
{
//语句描述:Linq使用group by分组按UserID用户ID查询出用户最高的成绩信息
//group by分组语法:group tbAchievement by tbAchievement.UserID into tbStudent
//表示对tbAchievement按UserID字段进行分组,其结果命名为tbStudent
//一旦重新命名,tbAchievement的作用域就结束了,所以,最后select时,只能select tbStudent
var listAchievement = from tbAchievement in myModels.PW_Achievement
group tbAchievement by tbAchievement.UserID into tbStudent
select new
{ UserID = tbStudent.Key,//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 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、设计表头headRow.
//3.1、创建表头
IRow headRow = sheet.CreateRow(0);设置单元格的值
//3.2、设计Excel表头字段
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每执行一次就创建一行
for (int i = 0; i < listResult.Count(); i++)
{//4.1、创建行
IRow rowTemp = sheet.CreateRow(i + 1);
//4.2、写入数据 第一条数据是从零(i)开始
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(“yyyyMMddHHmmss”) + “.xls”;设置他的名字日期 年月日时分秒yyyyMMddHHmmss 文件的尾坠xls
//返回 把表格return File
return File(exStream, “application/vnd.ms-excel”, exFileName);
}
//导出数据到Excel表格,点击查询出数据,点击导出当前数据到Excel就会执行下面方法,提示如图
function exportExcel()
{
layer.confirm(“确定要导出当前表格中数据吗?是请点击确定,否则请重新筛选数据再导出!”, { icon: 3, title: “提示” }, function (layerIndex) {
layer.close(layerIndex);页面输出
window.open(“ExportStudentAchievement?”+strCond
点击确定就会像下载东西那样下载好如图
在这里插入图片描述
在这里插入图片描述
});
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值