如何使用C#在Excel中按item.PRJ_NAM字段分组生成文件
按PRJ_NAM分组生成Excel的实现方案(基于EPPlus)
嘿,看你的代码片段应该是用EPPlus库来操作Excel的对吧?那咱们直接基于这个库来实现按PRJ_NAM字段分组的需求,步骤很清晰:
第一步:先对数据源按项目名称分组
先用LINQ的GroupBy方法把你的results集合按PRJ_NAM字段分组,这是实现分组的核心逻辑:
// 按PRJ_NAM分组,同时可排序让分组更规整(可选) var groupedResults = results.GroupBy(item => item.PRJ_NAM) .OrderBy(g => g.Key); // 按项目名称字母排序,按需去掉
第二步:修改Excel写入逻辑,按分组输出
接下来替换你原来的foreach循环,改成遍历每个分组:先写入分组标题(可以做样式突出显示),再写入该分组下的所有数据行。
完整代码示例如下:
// 表头设置(你的原有代码不变) ws.Cell("A1").Value = "Project Name"; ws.Cell("B1").Value = "Version"; ws.Cell("C1").Value = "Status"; ws.Cell("D1").Value = "Record Date"; ws.Cell("E1").Value = "Closing Date"; ws.Cell("F1").Value = "Currency"; // 可选:设置表头样式,让表头更美观 var headerStyle = ws.Cells("A1:F1").Style; headerStyle.Font.Bold = true; headerStyle.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; headerStyle.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray); int currentLine = 2; // 从第2行开始(表头是第1行) // 遍历每个分组 foreach (var group in groupedResults) { // 1. 写入分组标题:合并A到F列,显示项目名称 ws.Cells(currentLine, 1, currentLine, 6).Merge = true; // 合并当前行的A-F列 ws.Cell(currentLine, 1).Value = $"Project: {group.Key}"; // 设置分组标题样式(加粗、背景色) var groupTitleStyle = ws.Cell(currentLine, 1).Style; groupTitleStyle.Font.Bold = true; groupTitleStyle.Font.Size = 12; groupTitleStyle.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; groupTitleStyle.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightBlue); currentLine++; // 标题行写完,行数+1 // 2. 写入该分组下的所有数据行 foreach (var item in group) { ws.Cell(currentLine, 1).Value = item.PRJ_NAM; ws.Cell(currentLine, 2).Value = item.VERSION; // 替换成你的实体实际字段 ws.Cell(currentLine, 3).Value = item.STATUS; // 替换成你的实体实际字段 ws.Cell(currentLine, 4).Value = item.RECORD_DATE?.ToString("yyyy-MM-dd"); ws.Cell(currentLine, 5).Value = item.CLOSING_DATE?.ToString("yyyy-MM-dd"); ws.Cell(currentLine, 6).Value = item.CURRENCY; currentLine++; // 每行写完行数+1 } // 可选:每个分组之间加空行分隔,提升可读性 currentLine++; }
关键说明:
- 分组逻辑:
GroupBy(item => item.PRJ_NAM)会把相同PRJ_NAM的元素归为一个组,每个组的Key就是项目名称,group里包含该项目下的所有数据项。 - 样式优化:合并单元格、设置加粗和背景色是为了让分组标题更醒目,你可以根据需求调整样式(比如去掉背景色、修改字体大小)。
- 空行分隔:分组之间加空行是可选操作,如果不需要可以删掉
currentLine++;这一行。
如果你的Excel操作库不是EPPlus(比如NPOI),核心逻辑(先分组再遍历写入)是完全一致的,只是Excel单元格操作的语法会略有不同~
内容的提问来源于stack exchange,提问作者user4337260
相关产品推荐
相关产品推荐

