You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:15:25