这篇文章主要讲述导出考生的成绩信息,包括相关数据信息。
目录:
1.联表查询,条件筛选,执行linq查询
2.构建Excel,创建工作表,标题行(单元格、合并指定单元格、设置标题行样式)
3.表头行(创建表头样式an,以及相关CSS 样式、单元格循环)
4.数据行(遍历数据,创建单元格样式,遍历数据、添加样式)
5.设置列宽为自动适应(长度、宽度)
6.把创建好的Excel输出到浏览器(把Excel转化为流输出)
联表查询,条件筛选,执行linq查询
第一步操作,联表查询两个表的数据,这里我就不给联表查询数据的代码了。既然做到这里相信友友们肯定都可以自主完成的,所以下面简单分析一下。
查询出考生的成绩信息,可以使用Linq以group by 分组按用户ID查询出用户的最高的成绩信息 ,既然是联表查询考生的成绩信息,不言而喻肯定是一个表查询考生相关的所有信息(学生ID、学号、姓名、性别、班级、考试次数、最优成绩、合格类型、学院ID、年级ID、班级ID) ;一个表查询与成绩相关的所有信息(最优成绩、总考试次数、合格类型、根据学生成绩进行倒序排获取第一条数据的成绩ID,还有需要用到一个属性kep:返回进行分组的关键字段的值)。
然后条件筛选,if判断学院ID、年级ID、班级ID不为空并且大于0,最后执行linq查询。
构建Excel,创建工作表,以及标题行
在导入试题的时候, 我们需要构建Excel来为导出数据作铺垫,接下来,创建工作薄。工作表。
工作表里面当然也需要设置标题行,因此,我们需要创建标题行,这会用到一个属性,CreateRow(行的索引值),然后创建单元格设置单元格内容以及标题行跨列显示(合并指定单元格),最后设置标题行样式。
//3、标题行
IRow rowTitle = sheet.CreateRow(0);
ICell cell0 = rowTitle.CreateCell(0);
cell0.SetCellValue("考生成绩表");
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 6));
ICellStyle cellStyle_Title = workbook.CreateCellStyle();
cellStyle_Title.Alignment = HorizontalAlignment.CENTER;
cellStyle_Title.VerticalAlignment = VerticalAlignment.CENTER;
IFont font_Title = workbook.CreateFont();
font_Title.Color = NPOI.HSSF.Util.HSSFColor.SKY_BLUE.index;
font_Title.Boldweight = (short)FontBoldWeight.BOLD;//加粗
cellStyle_Title.SetFont(font_Title);
cellStyle_Title.BorderLeft = CellBorderType.THIN;
cellStyle_Title.BorderTop = CellBorderType.THIN;
cellStyle_Title.BorderRight = CellBorderType.THIN;
cellStyle_Title.BorderBottom = CellBorderType.THIN;
cell0.CellStyle = cellStyle_Title;
表头行(创建表头样式an,以及相关CSS 样式、单元格循环)
创建表头行并分别设置字段,字段里面包括序号,学号、姓名、性别、班级、成绩还有合格类型;
然后设置表头行样式,声明样式,水平居中、垂直居中、设置背景填充效果、还有设置背景填充颜色;
接下来,设置边框线为实线;
设置字体部分,分明包括声明字体,给字体加粗并且设置字体大小,这个字体大小不能大于单元格的宽高、加入单元格,然后给rowHerder单元格设置样式 并且