创建Excel对象和打印成绩的部分代码总结(6)

开发工具与关键技术: 创建Excel对象和打印成绩的部分代码总结(6)
作者:冉启东  年级:1804
撰写时间:2019年5月3日                
本技术文献起止时间 2019年4 月30日~ 2019年5月8日
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
创建Excel对象
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
NPOI.SS.UserModel.ISheet sheet = book.CreateSheet();//创建Excel对象工作簿
#region 给导出的Excel设置表头
NPOI.SS.UserModel.IRow row1 = sheet.CreateRow(0);//给sheet添加第一行的头部标题
row1.CreateCell(0).SetCellValue("学号");
row1.CreateCell(1).SetCellValue("姓名");
row1.CreateCell(2).SetCellValue("性别");
row1.CreateCell(3).SetCellValue("班级");
row1.CreateCell(4).SetCellValue("成绩");
row1.CreateCell(5).SetCellValue("合格类型");
#endregion
#region 给sheet的每行添加数据
for (int i = 0; i < listResult.Count; i++)
{
NPOI.SS.UserModel.IRow row = sheet.CreateRow(i + 1);//给sheet添加一行
row.CreateCell(0).SetCellValue(listResult[i].StudentNumber);
row.CreateCell(1).SetCellValue(listResult[i].StudentName);                row.CreateCell(2).SetCellValue(listResult[i].StudentSex);
row.CreateCell(3).SetCellValue(listResult[i].ClassName);
row.CreateCell(4).SetCellValue(listResult[i].Achievement.ToString());
row.CreateCell(5).SetCellValue(listResult[i].EligibleType);
}
#endregion
//输出的文件名称
string fileName = "学生安全教育测试成绩" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-ffff") + ".xls";
//把Excel转化为文件流,输出
MemoryStream BookStream = new MemoryStream();//定义文件流
book.Write(BookStream);//将工作薄写入文件流
BookStream.Seek(0, SeekOrigin.Begin);//输出之前调用Seek(偏移量,游标位置)方法:获取文件流的长度
return File(BookStream, "application/vnd.ms-excel", fileName); // 文件类型/文件名称/
}

<summary>
创建Excel对象,![在这里插入图片描述](https://img-blog.csdnimg.cn/20190505071519939.png)点击后浏览器自己下载![在这里插入图片描述](https://img-blog.csdnimg.cn/20190505071527794.png)
打印成绩
</summary>
<param name="AcademeID">学院ID</param>
<param name="GradeID">年级ID</param>
<param name="ClassID">班级ID</param>
<returns></returns>
public ActionResult PrintAchievement(int AcademeID, int GradeID, int ClassID)
{
try
{
#region 查询需要导出的数据
var listAchievement = from tbAchievement in myModel.PW_Achievement
group tbAchievement by tbAchievement.UserID into tbStudent
select new
{//OrderByDescending 倒叙排序   //FirstOrDefault()方法返回序列的第一个元素
UserID = tbStudent.Key,
AchievementID = tbStudent.OrderByDescending(m => m.Achievement).FirstOrDefault().AchievementID,
Achievement = tbStudent.OrderByDescending(m => m.Achievement).FirstOrDefault().Achievement,
EligibleTypeID = tbStudent.OrderByDescending(m => m.Achievement).FirstOrDefault().EligibleTypeID//最高成绩对应的合格类型
};
var listResult = from tbAchievement in listAchievement
join tbEligibleType in myModel.SYS_EligibleType on tbAchievement.EligibleTypeID equals tbEligibleType.EligibleTypeID
join tbStudent in myModel.PW_Student on tbAchievement.UserID equals tbStudent.UserID
join tbAcademe in myModel.SYS_Academe on tbStudent.AcademeID equals tbAcademe.AcademeID
join tbClass in myModel.SYS_Class on tbStudent.ClassID equals tbClass.ClassID
join tbGrade in myModel.SYS_Grade on tbClass.GradeID equals tbGrade.GradeID
select new AchievementInfor
{
StudentName = tbStudent.StudentName,
StudentNumber = tbStudent.StudentNumber,
StudentSex = tbStudent.StudentSex,
ClassName = tbClass.ClassName,
//ExamNumber = tbAchievement.ExamNumber,
Achievement = tbAchievement.Achievement,
EligibleType = tbEligibleType.EligibleTypeName,
AcademeID = tbAcademe.AcademeID,
GradeID = tbGrade.GradeID,
ClassID = tbClass.ClassID,
};
if (AcademeID > 0)
{
listResult = listResult.Where(m => m.AcademeID == AcademeID);
}
if (GradeID > 0)
{
listResult = listResult.Where(m => m.GradeID == GradeID);
}
if (ClassID > 0)
{
listResult = listResult.Where(m => m.ClassID == ClassID);
}
var listAchievements = listResult.OrderByDescending(m => m.Achievement).ToList();
#endregion
DataTable dt = LINQToDataTable(listAchievements);//将listResult转化为DataTable类型数据
PrintReport.ReportDB dbReport = new PrintReport.ReportDB();
//将dt的数据放入数据集的数据表中
dbReport.Tables["tbAchivment"].Merge(dt);
AchievementReport rp = new AchievementReport();//实例化报表模板
//获取报表物理文件地址  
string strRptPath = System.Web.HttpContext.Current.Server.MapPath("~/") + "Areas\\ExaminationManagement\\PrintReport\\AchievementReport.rpt";
rp.Load(strRptPath);//把报表文件加载到ReportDocument
rp.SetDataSource(dbReport); //设置报表数据源
Stream stream = rp.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); //把ReportDocument转化为文件流
return File(stream, "application/pdf"); //返回
}
catch (Exception e)
{
return Json("",JsonRequestBehavior.AllowGet);
}
}
//将IEnumerable<T>类型的集合 转换为DataTable类型 
public DataTable LINQToDataTable<T>(IEnumerable<T> varlist)
{//定义要返回的DataTable对象
DataTable dtReturn = new DataTable();
// 保存列集合的属性信息数组
PropertyInfo[] oProps = null;
if (varlist == null) return dtReturn;//安全性检查
//循环遍历集合,使用反射获取类型的属性信息
foreach (T rec in varlist)
{
//使用反射获取T类型的属性信息,返回一个PropertyInfo类型的集合
if (oProps == null)
{
oProps = ((Type)rec.GetType()).GetProperties();
//循环PropertyInfo数组
foreach (PropertyInfo pi in oProps)
{
Type colType = pi.PropertyType;//得到属性的类型
//如果属性为泛型类型
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
== typeof(Nullable<>)))
{   //获取泛型类型的参数
colType = colType.GetGenericArguments()[0];
}
//将类型的属性名称与属性类型作为DataTable的列数据
dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
}
}
//新建一个用于添加到DataTable中的DataRow对象
DataRow dr = dtReturn.NewRow();
//循环遍历属性集合
foreach (PropertyInfo pi in oProps)
{   //为DataRow中的指定列赋值
dr[pi.Name] = pi.GetValue(rec, null) == null ?
DBNull.Value : pi.GetValue(rec, null);
}
//将具有结果值的DataRow添加到DataTable集合中
dtReturn.Rows.Add(dr);
}
return dtReturn;//返回DataTable对象
}
}
}
点击打印成绩会弹出是否打印![在这里插入图片描述](https://img-blog.csdnimg.cn/20190505071600710.png),点击是就完成咯。![在这里插入图片描述](https://img-blog.csdnimg.cn/20190505071607726.png)

猜你喜欢

转载自blog.csdn.net/weixin_44540672/article/details/89838212